delphi 局域网 唤醒电脑 根据 mac地址
uses
WinSock, SysUtils;
procedure WakeOnLan(const MACAddress: string);
var
Sock: TSocket;
SockAddr: TSockAddrIn;
WSAData: TWSAData;
MagicPacket: array[0..101] of Byte;
MACBytes: array[0..5] of Byte;
i, j: Integer;
begin
// 初始化 Winsock
if WSAStartup($0202, WSAData) <> 0 then
raise Exception.Create('WSAStartup failed');
try
// 创建 UDP 套接字
Sock := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if Sock = INVALID_SOCKET then
raise Exception.Create('Socket creation failed');
try
// 设置广播选项
i := 1;
if setsockopt(Sock, SOL_SOCKET, SO_BROADCAST, @i, SizeOf(i)) <> 0 then
raise Exception.Create('setsockopt failed');
// 设置目标地址
SockAddr.sin_family := AF_INET;
SockAddr.sin_port := htons(9); // WOL 默认端口
SockAddr.sin_addr.S_addr := INADDR_BROADCAST;
// 将 MAC 地址转换为字节数组
for i := 0 to 5 do
MACBytes[i] := StrToInt('$' + Copy(MACAddress, i * 2 + 1, 2));
// 构建魔术包
for i := 0 to 5 do
MagicPacket[i] := $FF;
for i := 1 to 16 do
for j := 0 to 5 do
MagicPacket[i * 6 + j] := MACBytes[j];
// 发送魔术包
if sendto(Sock, MagicPacket, SizeOf(MagicPacket), 0, SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR then
raise Exception.Create('sendto failed');
finally
closesocket(Sock);
end;
finally
WSACleanup;
end;
end;
// 示例调用
begin
WakeOnLan('001122334455');
end;这个代码使用 Windows API 函数来创建 UDP 套接字并发送魔术包。请确保你的局域网和目标电脑支持 Wake-on-LAN 功能,并且在 BIOS 或网卡设置中启用了该功能。
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.99666309356689 seconds