Delphi Winsock远程唤醒计算机的函数


本文整理自网络,侵删。

 
uses Winsock;

{远程唤醒函数   00-e0-4d-df-7e-8a}

procedure WakeUpPro(MacAddr: string);
var
  WSAData           : TWSAData;
  MSocket           : TSocket;
  SockAddrIn        : TSockAddrIn;
  i                 : integer;
  MagicAddr         : array[0..5] of Byte;
  MagicData         : array[0..101] of Byte;
begin
  for i := 0 to 5 do
    MagicAddr[i] := StrToInt('$' + copy(MacAddr, i * 3 + 1, 2));
  try
    WSAStartup($0101, WSAData);
    MSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); //创建一个UPD数据报SOCKET.
    if MSocket = INVALID_SOCKET then
      exit;
    i := 1;
    setsockopt(MSocket, SOL_SOCKET, SO_BROADCAST, PChar(@i), SizeOf(i)); //设置广播
    FillChar(MagicData, SizeOf(MagicData), $FF);
    i := 6;
    while i < SizeOf(MagicData) do
    begin
      Move(MagicAddr, Pointer(Longint(@MagicData) + i)^, 6);
      Inc(i, 6);
    end;
    SockAddrIn.sin_family := AF_INET;
    SockAddrIn.sin_addr.S_addr := Longint(INADDR_BROADCAST);
    sendto(MSocket, MagicData, SizeOf(MagicData), 0, SockAddrIn, SizeOf(SockAddrIn));
    closesocket(MSocket);
    WSACleanup;
  except
    on E: Exception do
      //('WakeUpPro ' + MacAddr + ' except!' + E.Message);
  end;
end;

相关阅读 >>

Delphi 判断字符串是否是单词

Delphi 全局的鼠标钩子 使用钩子函数数据传递

Delphi连接access提示密码无效解决一例

Delphi 比较版本号

Delphi2010 的自带的内存泄漏检测

Delphi win32_networkadapter 网卡 参数说明

Delphi xe5 unicodestring的由来

Delphi tstringlist 保存txt文本文件最后一行不留空行

Delphi 怎么截取文件路径字符串,只保留文件名

Delphi判断文件是否正在被使用

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...