![]() |
Wake On Lan (WOL) für Delphi 2007 / Indy
Hi, ich versuche gerade den Code aus der Library umzuschreiben, so dass man ihn mit Delphi 2007 und der aktuellen Indy benutzen kann (die bei Delphi 2007 dabei ist).
Problem: lUDPClient.SendBuffer(lUDPClient.Host, lUDPClient.Port, bs); "Es gibt keine Überladene Version blabla" --> bs sollte vom falschen Typ sein. In der CodeVervollständigung steht zwar der Typ TBytes drinnen, die Indy-Hilfe sagt jedoch ich solle TIdBytes verwenden. Egal wie, das Programm mag weder mit dem Einen, noch mit dem anderen Typen kompilieren. Irgendeine Idee? Edit: Falls ich wirklich alles mit TidBytes fülle kommt der I/O Fehler 105. Was auch immer das bedeutet. Edit2: Es geht um Indy10. Indy9 würde wohl funktionieren laut den anderen Beispielen. Ich hasse Indy *grummel*
Delphi-Quellcode:
unit uWakeOnLan;
interface implementation uses WinTypes, Messages, SysUtils, Classes, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient; Function HexToInt(S:String): LongInt; const DecDigits: Set Of '0'..'9' = ['0'..'9']; HexVals: Array [0..$F] Of Integer = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, $A, $B, $C, $D, $E, $F); UpCaseHexLetters: Set Of 'A'..'F' = ['A'..'F']; LowCaseHexLetters: Set Of 'a'..'f' = ['a'..'f']; var v: LongInt; i: integer; LookUpIndex: integer; begin if length(S) <= 8 then begin v := 0; for i := 1 to length(S) do begin {$R-} v := v Shl 4; {$R+} if S[i] in DecDigits then begin LookUpIndex := Ord(S[i]) - Ord('0'); end else begin if S[i] in UpCaseHexLetters then begin LookUpIndex := Ord(S[i]) - Ord('A') + $A; end else begin if S[i] in LowCaseHexLetters then begin LookUpIndex := Ord(S[i]) - Ord('a') + $A; end else begin LookUpIndex := 0; end; end; end; v := v Or HexVals[LookUpIndex]; end; result := v; end else begin result := 0; end; end; procedure WakeUPComputer(aMacAddress: string); var i, j: Byte; lBuffer: array[1..116] of Byte; lUDPClient: TIdUDPClient; bs: TBytes; begin try SetLength(bs, 116); for i := 0 to 5 do begin bs[i] := HexToInt(aMacAddress[(i * 2) - 1] + aMacAddress[i * 2]); end; bs[6] := $00; bs[7] := $74; bs[8] := $FF; bs[9] := $FF; bs[10] := $FF; bs[11] := $FF; bs[12] := $FF; bs[13] := $FF; for j := 1 to 16 do begin for i := 1 to 6 do begin bs[14 + (j - 1) * 6 + (i - 1)] := bs[i]; end; end; bs[115] := $00; bs[114] := $40; bs[113] := $90; bs[112] := $90; bs[111] := $00; bs[110] := $40; try lUDPClient := TIdUDPClient.Create(nil); lUDPClient.BroadcastEnabled := true; lUDPClient.Host := '255.255.255.255'; lUDPClient.Port := 2050; lUDPClient.SendBuffer(lUDPClient.Host, lUDPClient.Port, bs); // <-- hier das Problem writeln('Trying to wake-up remote host: ' + aMacAddress); finally lUDPClient.Free; end; except on E: Exception do writeln('There was an error'); end; end; end. |
Re: Wake On Lan (WOL) für Delphi 2007 / Indy
Habe das Problem lösen können, unter anderem mit Hilfe von
![]() Hier die komplette Unit, vielleicht mag das ja mal jemand als Aktualisierung in die Library hinzufügen:
Delphi-Quellcode:
unit uWakeOnLan;
interface uses WinTypes, Messages, SysUtils, Classes, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdGlobal; procedure WakeUPComputer(aMacAddress: string); implementation procedure WakeUPComputer(aMacAddress: string); var Data: string; temp: string; k, n: integer; idUDPClient: TIdUDPClient; begin try SetLength(Data, 255); for k := 0 to 5 do begin Data := Data + Chr(StrToInt('$FF')); // 6x add a FF / 6x ein FF hinzufügen end; temp := StringReplace(aMacAddress, '-', '', [rfReplaceAll]); for k := 0 to 15 do begin temp := StringReplace(aMacAddress, '-', '', [rfReplaceAll]); for n := 0 to 5 do begin // 16x add Target-Mac-Adress / 16x die Ziel-Macadresse hinzufügen Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); Delete(temp, 1, 2); end; end; try idUDPClient := TIdUDPClient.Create(NIl); idUDPClient.BroadcastEnabled := true; idUDPClient.Host := '255.255.255.255'; idUDPClient.Port := 80; idUDPClient.Send(Data); finally FreeAndNil(idUDPClient); end; except end; end; end. |
AW: Wake On Lan (WOL) für Delphi 2007 / Indy
So richtig gut wurde aber nicht von Torry abgeschrieben.
Am Anfang die 255 Zeichen waren da noch nicht drin. Das Create gehört gefälligst vor das Try und das erste
Delphi-Quellcode:
ist auch nutzlos.
Temp :=
Da hat wohl jemand nicht auf das gehört, das der Compiler einem zu sagen hat. :roll: ---------------- Ursache: ![]() Code für Indy 10 und Unicode-Delphis:
Delphi-Quellcode:
(ich hoffe mal der funktioniert auch, da blind dahingetippt und ungetestet)
procedure WakeOnLAN(MacAddr: string; Port: TIdPort=80; Host: string='255.255.255.255');
var MacAddr: string; Data: TIdBytes; Temp: array[0..5] of Byte; i: Integer; begin MacAddr := StringReplace(MacAddr, '-', '', [rfReplaceAll]); Assert(Length(MacAddr) = 6 * 2); SetLength(Data, (1 + 16) * 6); FillChar(Temp, 6, $FF); Move(Temp, Data[0], 6); // 6x FF (1x FFFFFFFFFFFF) HexToBin(PChar(MacAddr), Temp, 6); for i := 1 to 16 do Move(Temp, Data[i * 6], 6); // 16x Target-MAC-Adress IdUDPClient1.SendBuffer(MacAddr, Port, Data); end; |
AW: Wake On Lan (WOL) für Delphi 2007 / Indy
Hallo,
ich grabe mal den Thread hier aus, da das WakeOnLan bei mir nicht mehr funktioniert. Im letztem Codebeispiel habe ich den kleinen Vertipper IdUDPClient1.SendBuffer(MacAddrHost, Port, Data); korrigiert, leider startet der Rechner nicht. Gegeben: Delphi 10.1 Enterprise Win10 Pro 64 bit Schnellstart deaktiviert BIOS und Energieeinstellungen überprüft. Über die FritzBox kann ich den Rechner per WOL starten, leider nicht mit Delphi. Kennt jemand das Problem, liegt es ggf. am 64 Bit System? |
AW: Wake On Lan (WOL) für Delphi 2007 / Indy
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
WOL funktioniert nur mit MAC Adressen. Aber Wie Himitsu schon sagte, er hat es nicht getestet. Und ich glaub es fehlt auch was. Du müsstest den oberen Code um seine Ergänzungen erweitern/ändern. dann sollte das klappen. Ich verwende seit Jahren diese Unit aus meiner persönlichen Codesammlung erfolgreich. Ich glaub die stammt auch aus der DP. Möglich, dass ich dran herum optimiert hab. Das sähe mir ähnlich. Falls der Autor sie wieder erkennt: Dickes, dickes Dankeschön! Gruß, Toni |
AW: Wake On Lan (WOL) für Delphi 2007 / Indy
Hast Du auch eine Crossplattform-Lösung?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz