線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2074
推到 Plurk!
推到 Facebook!

Wake on Lan Delphi Source Code

缺席
demon1042001
一般會員


發表:14
回覆:19
積分:6
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-21 14:09:18 IP:61.220.xxx.xxx 未訂閱
引言: unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, WinSock; type TfrmMain = class(TForm) GroupBox1: TGroupBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; GroupBox2: TGroupBox; lbMessage: TLabel; Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const LEN_PHYSADDR = 6; var frmMain: TfrmMain; WSAData: TWSAData; MSocket: TSocket; SockAddrIn: TSockAddrIn; RetVal, OptVal, i: Integer; MacAddr: array[0..5] of Byte; MagicData: array[0..101] of Byte; Position: Longint; SAddr: string; implementation {$R *.dfm} function CheckWinSockResult(ResultCode: Integer; const FuncName: string): String; var ErrorNumber: integer; begin if ResultCode <> 0 then begin ErrorNumber := WSAGetLastError; Result := Format('Windows socket error: %s (%d), on API ''%s''.',[SysErrorMessage(ErrorNumber), ErrorNumber, FuncName]); Halt; end else Result := IntToStr(0); end; function SendWol(Mac: String):String; var i:integer; begin try SAddr := Mac; if Length(SAddr) <> 17 then Abort; for i := 1 to Length(SAddr) do if i in [3, 6, 9, 12, 15] then if SAddr[i] <> ':' then Abort; for i := 0 to High(MacAddr) do begin if Pos(':', SAddr) > 0 then MacAddr[i] := StrToInt(HexDisplayPrefix Copy(SAddr, 1, Pos(':', SAddr) - 1)) else MacAddr[i] := StrToInt(HexDisplayPrefix SAddr); Delete(SAddr, 1, Pos(':', SAddr)); end; except Result := 'Invalid Ethernet address.'; Halt; end; Result := CheckWinSockResult(WSAStartup($0101, WSAData), 'WSAStartup'); MSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if MSocket = INVALID_SOCKET then Result := CheckWinSockResult(MSocket, 'socket'); OptVal := 1; Result := CheckWinSockResult(setsockopt(MSocket, SOL_SOCKET, SO_BROADCAST, PChar(@OptVal), SizeOf(OptVal)), 'setsockopt'); FillChar(MagicData, SizeOf(MagicData), $FF); Position := LEN_PHYSADDR; while Position < SizeOf(MagicData) do begin Move(MacAddr, Pointer(Longint(@MagicData) Position)^, LEN_PHYSADDR); Inc(Position, LEN_PHYSADDR); end; SockAddrIn.sin_family := AF_INET; SockAddrIn.sin_addr.S_addr := Longint(INADDR_BROADCAST); RetVal := sendto(MSocket, MagicData, SizeOf(MagicData), 0, SockAddrIn, SizeOf(SockAddrIn)); if RetVal = SOCKET_ERROR then Result := CheckWinSockResult(RetVal, 'sendto'); Result := CheckWinSockResult(closesocket(MSocket), 'closesocket'); Result := CheckWinSockResult(WSACleanup, 'WSACleanup'); end; procedure TfrmMain.Button1Click(Sender: TObject); begin Label1.Caption := SendWol(Edit1.Text ':' Edit2.Text ':' Edit3.Text ':' Edit4.Text ':' Edit5.Text ':' Edit6.Text); end; procedure TfrmMain.Button2Click(Sender: TObject); begin close; end; end.
系統時間:2024-04-25 21:45:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!