亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? frm_main.~pas

?? delphi的源代碼:查找通信設備的mac地址
?? ~PAS
字號:
unit Frm_Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ActnList, ActnMan, HercLib, XPStyleActnCtrls;

type
  TFrmMain = class(TForm)
    GroupBoxDevice: TGroupBox;
    GroupBoxPassword: TGroupBox;
    GroupBoxPowerDownTimeout: TGroupBox;
    BtnScanDevice: TButton;
    EdtPassword: TEdit;
    ChkApplyToRemoteDevice: TCheckBox;
    LblRemoteDEK: TLabel;
    EdtRemoteDEK: TEdit;
    BtnApplyPassword: TButton;
    BtnSetDefaultPassword: TButton;
    CboPowerDownTimeout: TComboBox;
    BtnSetDefaultPowerDownTimeout: TButton;
    BtnApplyPowerDownTimeout: TButton;
    TreeViewDevice: TTreeView;
    ActionManager: TActionManager;
    ActApplyPowerDownTimeout: TAction;
    ActSetDefaultPowerDownTimeout: TAction;
    ActApplyPassword: TAction;
    ActSetDefaultPassword: TAction;
    ActScanDevice: TAction;
    BtnUpdateSpeed: TButton;
    ActUpdateSpeed: TAction;
    procedure ChkApplyToRemoteDeviceClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ActSetDefaultPowerDownTimeoutExecute(Sender: TObject);
    procedure ActSetDefaultPasswordExecute(Sender: TObject);
    procedure ActApplyPowerDownTimeoutExecute(Sender: TObject);
    procedure ActApplyPasswordExecute(Sender: TObject);
    procedure ActApplyPowerDownTimeoutUpdate(Sender: TObject);
    procedure ActApplyPasswordUpdate(Sender: TObject);
    procedure ActScanDeviceExecute(Sender: TObject);
    procedure TreeViewDeviceChange(Sender: TObject; Node: TTreeNode);
    procedure ActUpdateSpeedExecute(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;
  SelectedDeviceIndex: Integer;
  Devices: array[0..99] of TDeviceRec;
  DeviceCount: Integer;

  procedure ScanProgressCallback(Percentage: LongWord; Abort: PLongWord); stdcall;

implementation

{$R *.dfm}

uses
  SplitFns;

procedure TFrmMain.ChkApplyToRemoteDeviceClick(Sender: TObject);
begin
  EdtRemoteDEK.Enabled := ChkApplyToRemoteDevice.Checked;
  LblRemoteDEK.Enabled := ChkApplyToRemoteDevice.Checked;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  Application.Title := 'Powerline Configuration Utility';

  ChkApplyToRemoteDevice.Checked := False;
  EdtRemoteDEK.Enabled := False;
  LblRemoteDEK.Enabled := False;

  SelectedDeviceIndex := -1;
  DeviceCount := 0;
end;

procedure TFrmMain.ActSetDefaultPowerDownTimeoutExecute(Sender: TObject);
begin
  CboPowerDownTimeout.ItemIndex := 0;
end;

procedure TFrmMain.ActApplyPowerDownTimeoutExecute(Sender: TObject);
var
  PowerDownTimeout: Integer;
  Code: Integer;
begin
  PowerDownTimeout := -1;
  case CboPowerDownTimeout.ItemIndex of
    -1: Exit;
    0: PowerDownTimeout := 0;
    1: PowerDownTimeout := 30;
    2: PowerDownTimeout := 60;
    3: PowerDownTimeout := 120;
    4: PowerDownTimeout := 180;
  end;

  if (PowerDownTimeout < 0) or (PowerDownTimeout > 255) then
  begin
    MessageDlg('Error: The value should between 0 to 255', mtError, [mbOk], 0);
    Exit;
  end;

  Code := SetPowerdownTimeout(SelectedDeviceIndex, Byte(PowerDownTimeout));
  if TReturnCode(Code) <> AFA_OK then
  begin
    MessageDlg('Error: SetPowerdownTimeout() =' + IntToStr(Code), mtError,
        [mbOk], 0);
    Exit;
  end;
end;

procedure TFrmMain.ActSetDefaultPasswordExecute(Sender: TObject);
begin
  EdtPassword.Text := 'HomePlug';
end;

procedure TFrmMain.ActApplyPasswordExecute(Sender: TObject);
var
  MACBuf: PByte;
  Code: Integer;
begin
  Code := SetLocalKey(SelectedDeviceIndex, PChar(Trim(EdtPassword.Text)));
  if TReturnCode(Code) = AFA_OK then
  begin
    if ChkApplyToRemoteDevice.Checked then
    begin
      GetMem(MACBuf, 6);

      Code := SetRemoteKey(SelectedDeviceIndex, PChar(Trim(EdtPassword.Text)),
          PChar(Trim(EdtRemoteDEK.Text)), MACBuf);
      FreeMem(MACBuf);
      if TReturnCode(Code) <> AFA_OK then
      begin
        MessageDlg('Error: SetRemoteKey() =' + IntToStr(Code), mtError,
            [mbOk], 0);
        Exit;
      end;
    end;
    ShowMessage('Change Password Success');
  end else
  begin
    ShowMessage('Error: SetLocalKey() =' + IntToStr(Code));
    Exit;
  end;
end;

procedure TFrmMain.ActApplyPowerDownTimeoutUpdate(Sender: TObject);
begin
  ActApplyPowerDownTimeout.Enabled := SelectedDeviceIndex <> -1;
end;

procedure TFrmMain.ActApplyPasswordUpdate(Sender: TObject);
begin
  ActApplyPassword.Enabled := SelectedDeviceIndex <> -1;
end;

procedure ScanProgressCallback(Percentage: LongWord; Abort: PLongWord); stdcall;
begin
  FrmMain.Caption := Application.Title + ' - Scaning... '
      + IntToStr(Percentage);
end;

procedure TFrmMain.ActScanDeviceExecute(Sender: TObject);
var
  DeviceListBuf: PChar;
  Count: Integer;
  Code: Integer;

  procedure ParseDeviceListStr(DeviceListStr: string);
  var
    DeviceList: TStringList;
    FieldList: TStringList;
    MACByteList: TStringList;
    I: Integer;
    J: Integer;
  begin
    DeviceList := TStringList.Create;
    DeviceCount := 0;

    Split(DeviceListStr, ';', DeviceList);
    if DeviceList.Count > 0 then
    begin
      for I := 0 to (DeviceList.Count - 1) do
      begin
        FieldList := TStringList.Create;
        Split(DeviceList.Strings[I], ',', FieldList);

        // MAC Address
        MACByteList := TStringList.Create;
        Split(FieldList.Strings[0], ' ', MACByteList);
        for J := 0 to 5 do
        begin
          Devices[I].MACAddress[J] := StrToInt('$' + Trim(MACByteList.Strings[J]));
        end;

        // Local/Remote:  0 = Local; 1 = Remote
        if UpperCase(Trim(FieldList.Strings[1])) = 'L' then
        begin
          Devices[I].DevType := 0;
        end else if UpperCase(Trim(FieldList.Strings[1])) = 'R' then
        begin
          Devices[I].DevType := 1;
        end;

        // Group ID
        Devices[I].DevGroup := StrToInt(Trim(FieldList.Strings[2]));

        // IsActive
        if UpperCase(Trim(FieldList.Strings[3])) = 'A' then
        begin
          Devices[I].IsActive := True;
        end else if UpperCase(Trim(FieldList.Strings[3])) = 'N' then
        begin
          Devices[I].IsActive := False;
        end;

        FreeAndNil(FieldList);
        FreeAndNil(MACByteList);
      end;
    end;

    DeviceCount := DeviceList.Count;
    FreeAndNil(DeviceList);
  end;

  procedure DisplayDeviceList;
  var
    I: Integer;
    LocalNode: TTreeNode;
    RemoteNode: TTreeNode;
    IsLookForNextLocalNode: Boolean;
  begin
    if DeviceCount = 0 then
      Exit;

    TreeViewDevice.Items.Clear;

    LocalNode := nil;
    IsLookForNextLocalNode := False;
    for I := 0 to (DeviceCount - 1) do
    begin
      if Devices[I].DevType = 0 {local device} then
      begin
        if Devices[I].IsActive then
        begin
          IsLookForNextLocalNode := False;
          LocalNode := TreeViewDevice.Items.Add(nil, '');
          LocalNode.Text := 'Local Device [' + IntToStr(I) + '] => ';
          LocalNode.Text := LocalNode.Text + Format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x',
            [Devices[I].MACAddress[0], Devices[I].MACAddress[1], Devices[I].MACAddress[2],
             Devices[I].MACAddress[3], Devices[I].MACAddress[4], Devices[I].MACAddress[5]]);
          LocalNode.Data := Pointer(I); // save the device index in Data property
        end else
        begin
          IsLookForNextLocalNode := True;
          Continue;
        end;
      end else if Devices[I].DevType = 1 {remote device} then
      begin
        if IsLookForNextLocalNode then
        begin
          Continue;
        end;

        Assert(Assigned(LocalNode));

        if Devices[I].IsActive then
        begin
          RemoteNode := TreeViewDevice.Items.AddChild(LocalNode, '');
          RemoteNode.Text := 'Remote Device [' + IntToStr(I) + '] => ';
          RemoteNode.Text := RemoteNode.Text + Format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x',
            [Devices[I].MACAddress[0], Devices[I].MACAddress[1], Devices[I].MACAddress[2],
             Devices[I].MACAddress[3], Devices[I].MACAddress[4], Devices[I].MACAddress[5]]);
          RemoteNode.Data := Pointer(I); // save the device index in Data property
          LocalNode.Expand(True);
        end else
        begin
          Continue;
        end;
      end;
    end;
  end;

begin
  Count := 1024;
  DeviceListBuf := StrAlloc(Count);
  StrCopy(DeviceListBuf, PChar(''));
  SetScanProgressCallback(@ScanProgressCallback);

  Code := ScanDeviceEx(1, 1, DeviceListBuf, @Count);
  if TReturnCode(Code) <> AFA_OK then
  begin
    MessageDlg('Error: ScanDeviceEx() =' + IntToStr(Code), mtError,
        [mbOk], 0);
    StrDispose(DeviceListBuf);
    Exit;
  end;

  Self.Caption := Application.Title;

  ParseDeviceListStr(DeviceListBuf);
  DisplayDeviceList;

  // Always selected the first device if any device is found.

  if DeviceCount = 0 then
  begin
    SelectedDeviceIndex := -1;
    Self.Caption := Application.Title + ' - Please select a device';
  end else
  begin
    TreeViewDevice.SetFocus;
    TreeViewDevice.Select([TreeViewDevice.Items[0]]);
    Self.Caption := Application.Title + ' - ' + TreeViewDevice.Selections[0].Text;
    SelectedDeviceIndex := Integer(TreeViewDevice.Items[0].Data);

    if Devices[SelectedDeviceIndex].DevType = 0 {local} then
    begin
      GroupBoxPassword.Visible := True;
      GroupBoxPowerDownTimeout.Visible := True;
    end else if Devices[SelectedDeviceIndex].DevType = 1 {remote} then
    begin
      GroupBoxPassword.Visible := False;
      GroupBoxPowerDownTimeout.Visible := False;
    end;
  end;

  StrDispose(DeviceListBuf);

  ActUpdateSpeed.Execute;
end;

procedure TFrmMain.TreeViewDeviceChange(Sender: TObject; Node: TTreeNode);
begin
  if TreeViewDevice.SelectionCount = 0 then
  begin
    Exit;
  end;

  SelectedDeviceIndex := Integer(TreeViewDevice.Selections[0].Data);
  Self.Caption := Application.Title + ' - ' + TreeViewDevice.Selections[0].Text;

  if Devices[SelectedDeviceIndex].DevType = 0 {local} then
  begin
    GroupBoxPassword.Visible := True;
    GroupBoxPowerDownTimeout.Visible := True;
  end else if Devices[SelectedDeviceIndex].DevType = 1 {remote} then
  begin
    GroupBoxPassword.Visible := False;
    GroupBoxPowerDownTimeout.Visible := False;
  end;
end;

procedure TFrmMain.ActUpdateSpeedExecute(Sender: TObject);
var
  Code: LongWord;
  I: Integer;
  J: Integer;
  Buffer: PByte;
  BufSize: LongWord;
  ToneMapEntryList: PChar;
  Len: LongWord;
  ToneMapEntries: TStringList;
  Speed: LongWord;
  LocalNode: TTreeNode;
  RemoteNode: TTreeNode;
  Timeout: LongWord;
  TimerStart: LongWord;
  DeviceIndex: Integer;
  RemoteDeviceIndex: Integer;

  function CompareMAC(Device: TDeviceRec; MACStr: string): Boolean;
  var
    TmpMACStr: string;
  begin
    TmpMACStr := Format('%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x', [
        Device.MACAddress[0], Device.MACAddress[1], Device.MACAddress[2],
        Device.MACAddress[3], Device.MACAddress[4], Device.MACAddress[5]]);

    if TmpMACStr = UpperCase(Trim(MACStr)) then
    begin
      Result := True;
    end else
    begin
      Result := False;
    end;
  end;
begin
  for I := 0 to (TreeViewDevice.Items.Count - 1) do
  begin
    DeviceIndex := Integer(TreeViewDevice.Items[I].Data);
    if Devices[DeviceIndex].DevType = 0 {local} then
    begin
      // Get the tone map table.

      Buffer := nil;
      BufSize := 0;
      Timeout := 3000;
      TimerStart := GetTickCount;
      while True do
      begin
        if (GetTickCount - TimerStart) > Timeout then
        begin
          Exit;
        end;

        Code := GetToneMapTable(DeviceIndex, nil, @BufSize);
        if TReturnCode(Code) <> AFA_OK then
        begin
          Continue;
        end;

        GetMem(Buffer, BufSize);
        Code := GetToneMapTable(DeviceIndex, Buffer, @BufSize);
        if TReturnCode(Code) <> AFA_OK then
        begin
          FreeMem(Buffer);
          Continue;
        end else
        begin
          Break;
        end;
      end;

      // Get tone map entry data and speed from the tone map table.

      Assert(Assigned(Buffer));
      Code := GetToneMapEntryList(Buffer, BufSize, nil, @Len);
      if TReturnCode(Code) <> AFA_OK then
      begin
        FreeMem(Buffer);
        Continue;
      end;

      ToneMapEntryList := StrAlloc(Len);
      Code := GetToneMapEntryList(Buffer, BufSize, ToneMapEntryList, @Len);
      if TReturnCode(Code) <> AFA_OK then
      begin
        StrDispose(ToneMapEntryList);
        FreeMem(Buffer);
        Continue;
      end;

      ToneMapEntries := TStringList.Create;
      Split(ToneMapEntryList, ';', ToneMapEntries);
      StrDispose(ToneMapEntryList);

      if ToneMapEntries.Count = 0 then
      begin
        FreeAndNil(ToneMapEntries);
        FreeMem(Buffer);
        Continue;
      end;

      LocalNode := TreeViewDevice.Items[I];
      RemoteNode := LocalNode.GetFirstChild;
      while Assigned(RemoteNode) do
      begin
        for J := 0 to (ToneMapEntries.Count - 1) do
        begin
          if CompareMAC(Devices[Integer(RemoteNode.Data)],
              ToneMapEntries.Strings[J]) then
          begin
            GetSpeed(Buffer, BufSize, J, @Speed);
            RemoteDeviceIndex := Integer(RemoteNode.Data);
            RemoteNode.Text := 'Remote Device [' + IntToStr(RemoteDeviceIndex) + '] => ';
            RemoteNode.Text := RemoteNode.Text + Format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x',
              [Devices[RemoteDeviceIndex].MACAddress[0],
               Devices[RemoteDeviceIndex].MACAddress[1],
               Devices[RemoteDeviceIndex].MACAddress[2],
               Devices[RemoteDeviceIndex].MACAddress[3],
               Devices[RemoteDeviceIndex].MACAddress[4],
               Devices[RemoteDeviceIndex].MACAddress[5]]);
            RemoteNode.Text := RemoteNode.Text + ' (' + FloatToStr(Speed / 1000) + ' Mbps)';
          end;
        end;
        RemoteNode := LocalNode.GetNextChild(RemoteNode);
      end;

      FreeAndNil(ToneMapEntries);
      FreeMem(Buffer);
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产电影| 久久不见久久见免费视频7| av成人老司机| 亚洲欧美一区二区在线观看| 99精品欧美一区二区蜜桃免费 | 亚洲国产高清在线观看视频| 国产精品一区二区久激情瑜伽| 国产日韩高清在线| 91丝袜美腿高跟国产极品老师| 亚洲一区二区五区| 日韩视频免费观看高清完整版 | 日本一区二区成人在线| 99re热这里只有精品免费视频| 亚洲免费在线视频一区 二区| 欧美综合久久久| 久久国产精品99久久人人澡| 久久亚洲精华国产精华液| 成人av集中营| 日本不卡在线视频| 国产精品区一区二区三区 | 欧美日韩精品欧美日韩精品| 免费xxxx性欧美18vr| 久久精品夜夜夜夜久久| 在线观看一区不卡| 久久成人18免费观看| 亚洲婷婷综合色高清在线| 久久青草欧美一区二区三区| 国产91精品一区二区麻豆亚洲| 亚洲综合一区二区三区| 26uuu久久综合| 欧美在线制服丝袜| 国产精品一二一区| 日韩影院在线观看| 国产女人aaa级久久久级| 欧美日韩国产天堂| 成人激情小说乱人伦| 天天爽夜夜爽夜夜爽精品视频| 亚洲国产精品精华液2区45| 欧美一区二区私人影院日本| 99免费精品视频| 国产呦精品一区二区三区网站| 亚洲综合色视频| 中文字幕在线观看不卡视频| 日韩欧美在线1卡| 欧美午夜精品久久久| 成人免费三级在线| 精品一区二区三区香蕉蜜桃| 亚洲成人www| 亚洲男人的天堂av| 国产精品久久久一本精品| xfplay精品久久| 7799精品视频| 欧美亚洲一区三区| 91在线一区二区三区| 成人性生交大片免费 | 成人精品国产一区二区4080 | 国产在线看一区| 日韩在线一区二区三区| 亚洲精选一二三| 日韩一区有码在线| 中文字幕一区二区在线观看| 久久久亚洲精品石原莉奈| 日韩一区国产二区欧美三区| 欧美日韩精品一二三区| 欧美最猛性xxxxx直播| 色婷婷精品大在线视频| 色综合久久久久久久| 94-欧美-setu| 99国产精品久久久久久久久久| 成人动漫一区二区在线| 国产成人精品三级| 国产成人精品免费| 成人小视频免费观看| 国产成人综合网| 国产91丝袜在线观看| 不卡电影一区二区三区| caoporen国产精品视频| 成人免费视频免费观看| 91影视在线播放| 日本丶国产丶欧美色综合| 91美女福利视频| 欧美午夜片在线观看| 欧美日韩国产三级| 欧美一区二区三区免费观看视频| 欧美乱妇一区二区三区不卡视频| 欧美一区二区三区四区久久| 日韩欧美国产一二三区| 精品国产一区二区三区四区四 | 99久久伊人久久99| 色综合久久综合网| 欧美久久一二区| 日韩免费观看高清完整版 | 日韩一区二区免费高清| 日韩欧美国产成人一区二区| 久久婷婷久久一区二区三区| 国产欧美一区二区精品久导航 | 91精品婷婷国产综合久久竹菊| 日韩欧美一二区| 国产精品三级在线观看| 伊人开心综合网| 免费在线观看视频一区| 国产成人av福利| 在线观看亚洲专区| 日韩精品一区二区三区视频播放| 日韩一区二区不卡| 中文av一区特黄| 亚洲午夜在线视频| 国产精品一区二区在线观看不卡 | 在线观看一区不卡| 91麻豆精品国产91久久久久久 | 日韩视频一区二区三区| 欧美激情在线观看视频免费| 一区二区高清免费观看影视大全| 日韩1区2区3区| 成人精品国产免费网站| 欧美精品久久久久久久久老牛影院| 精品美女一区二区三区| 国产精品国产三级国产a | 欧美大胆人体bbbb| 欧美国产综合色视频| 丝袜诱惑制服诱惑色一区在线观看| 国内精品免费**视频| 欧美性大战xxxxx久久久| 久久久精品tv| 午夜欧美2019年伦理| 国产成人av一区二区| 337p亚洲精品色噜噜| 国产精品久久久久久久久免费樱桃| 亚洲午夜私人影院| eeuss鲁片一区二区三区| 日韩一区二区精品| 亚洲一区二区美女| 大桥未久av一区二区三区中文| 欧美精品一二三| 国产精品电影院| 国产一区在线观看视频| 欧美日韩一级视频| 亚洲激情图片小说视频| 高清国产午夜精品久久久久久| 在线综合视频播放| 亚洲地区一二三色| 日本乱人伦一区| 国产精品麻豆久久久| 美女免费视频一区二区| 制服丝袜中文字幕一区| 亚洲在线中文字幕| 色呦呦国产精品| 亚洲视频 欧洲视频| 成人自拍视频在线观看| 欧美精品一区二区三区蜜臀| 奇米影视一区二区三区| 欧美三级日韩三级| 亚洲综合无码一区二区| 一道本成人在线| 亚洲色图19p| 色悠久久久久综合欧美99| 自拍偷拍亚洲欧美日韩| 福利电影一区二区| 国产亚洲午夜高清国产拍精品| 久久福利视频一区二区| 欧美大片拔萝卜| 韩国女主播成人在线观看| 精品第一国产综合精品aⅴ| 久久99热国产| 久久综合九色综合欧美亚洲| 久久aⅴ国产欧美74aaa| 亚洲精品在线电影| 国产成人鲁色资源国产91色综| 国产网站一区二区| 不卡的电影网站| 国产精品久久99| 色噜噜久久综合| 午夜精品久久久久久久久久| 5566中文字幕一区二区电影| 丝袜亚洲另类欧美| 欧美成人艳星乳罩| 国产乱码精品一区二区三| 国产精品三级av| 91看片淫黄大片一级| 亚洲一区二区美女| 欧美妇女性影城| 九九视频精品免费| 国产亚洲欧美色| 色综合色综合色综合| 亚洲成av人在线观看| 精品乱码亚洲一区二区不卡| 国产成人在线电影| 亚洲美女屁股眼交3| 欧美日韩一区二区不卡| 国内成人精品2018免费看| 国产精品三级在线观看| 欧美色综合影院| 国产一区二区三区观看| 一色屋精品亚洲香蕉网站| 欧美日韩美少妇| 狠狠久久亚洲欧美| 国产精品传媒视频| 在线电影院国产精品| 成人午夜在线免费| 亚洲mv在线观看|