Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi PC über Netzwerk starten (https://www.delphipraxis.net/19725-pc-ueber-netzwerk-starten.html)

celinaw 7. Apr 2004 20:05


PC über Netzwerk starten
 
Hi

Gib es eine Möglichkeit einen PC über Netzwerk in den Standbymodus zu bringen und bei bedarf den Rechner über Netz auch wieder zu starten??


Gruß CelinaW

fkerber 7. Apr 2004 20:07

Re: PC über Netzwerk starten
 
Hi!

Falls du es nicht selbst machen willst:

Es gibt ein Programm, das heißt EasyReboot, ich glaube, das kann das...

Ciao fkerber

Styler 7. Apr 2004 20:07

Re: PC über Netzwerk starten
 
ich weis es nicht genau aber ich denke nicht dass das klappt. aber da musste jemand anderes fragen hab da keine Ahnung ;-)

kiar 7. Apr 2004 20:14

Re: PC über Netzwerk starten
 
hiermit soolte es gehen

http://assarbad.net/stuff/rshutdown2.zip

raik

celinaw 7. Apr 2004 20:16

Re: PC über Netzwerk starten
 
Hi@all

Ihr seit aber schnell heute :thuimb:

Werde mir eure Tips mal ansehen. Ihr hört von mir. Erst mal Danke!!!


Gruß CelinaW

celinaw 7. Apr 2004 20:21

Re: PC über Netzwerk starten
 
Hi Kiar

Wiso kann ich die Zip von assarbad nicht öffnen?

Hast du ne Idee :gruebel:

celinaw 7. Apr 2004 20:24

Re: PC über Netzwerk starten
 
Habs schon geöffnet bekommen!!!

Mal sehen ............................

NicoDE 7. Apr 2004 20:25

Re: PC über Netzwerk starten
 
Zitat:

Zitat von celinaw
Hi Kiar

Wiso kann ich die Zip von assarbad nicht öffnen?

Hast du ne Idee :gruebel:

http://assarbad.net/stuff/ und nach rshutdown2.zip suchen sollte helfen (wenn Du noch nicht auf der Seite warst, dann kann es sein, dass die Datei (warum auch immer) nicht gefunden wird).

celinaw 7. Apr 2004 20:36

Re: PC über Netzwerk starten
 
Hi nochmal....

Mh..., mit dem Programm von Assarbad kann man den PC neu starten oder herunterfahren. Aber wie sieht es aus mit Standby und wie kann man den PC aus dem Standby wieder starten?

Phoenix 7. Apr 2004 20:40

Re: PC über Netzwerk starten
 
In der Code-Library steht zum Beispiel das hier.

Wake on Lan ist genau das, was Du suchst.

celinaw 7. Apr 2004 20:46

Re: PC über Netzwerk starten
 
Hi Phoenix

Ja, ich denke das ist es was ich dafür brauche. Aber jetzt kommt mein Problem! Wie wende ich den Code an :gruebel:
Ich bin leider noch nicht so Fit in Delphi :oops:

Kannst du mir da ein paar Tips oder ein Beispiel geben :gruebel: Wäre echt super Lieb von dir!

Gruß CelinaW

Phoenix 7. Apr 2004 20:52

Re: PC über Netzwerk starten
 
Du suchst erstmal die Indy-Komponenten und installierst die.
Danach packst Du den Code aus dem Post in eine eigene Datei und nennst diese z.B. WakeOnLan.pas.

In deinem Programm (z.B. normale Form) schreibst Du oben in die Uses-Klausel dann WakeOnLan mit rein, und im Code schreibst Du dann irgendwo (z.B. in einer ButtonClick - Methode)
Code:
WakeUPComputer('AABBCCDDEEFF');
Wobei AABBCCDDEEFF dann halt für die MAC-Adresse des aufzuweckenden Rechners steht.

Das wars dann schon.

NicoDE 7. Apr 2004 20:52

Re: PC über Netzwerk starten
 
WakeUPComputer('00023F7F710E'); // 00-02-3F-7F-71-0E

Die physikalische Adresse (MAC) wird zum Beispiel angezeigt, wenn Du unter Windows XP in einer Konsole 'ipconfig -all' eingibst.

celinaw 7. Apr 2004 21:02

Re: PC über Netzwerk starten
 
WoW :thuimb: :thuimb: :thuimb:

Ihr seit echt Super. Ich versuche mal ob ich das hin bekomme. Ansonstan frage ich halt nochmal nach!

Vielen Vielen Vielen Dank!

Wenn das klappt habt ihr mir echt sehr geholfen!


Gruß CelinaW

celinaw 7. Apr 2004 21:32

Re: PC über Netzwerk starten
 
Mh...... Irgendwie klappt das bei mir nicht! Indys sind Installiert. Ich bekomme die Fehlermeldung "Interface" erwartet aber "Uses" gefunden.
Kann mir da mal jemand ein Beispiel coden :gruebel: :oops: :oops: :oops:


Gruß Celina

celinaw 7. Apr 2004 22:00

Re: PC über Netzwerk starten
 
Hi....

Kann sich mal jemand diese Unit ansehen?
Ich bekomme immer unzählige Fehlermeldungen. :wall: :wall:

Kann da jemand vielleicht mal ein Beispiel von erstellen. :gruebel: :oops: :oops:

Vielen Dank

kiar 7. Apr 2004 22:03

Re: PC über Netzwerk starten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
unit wakeonlan

interface

uses
das muss noch hin

ausser den uses

raik

celinaw 7. Apr 2004 23:37

Re: PC über Netzwerk starten
 
Hi@all


Habe das Problem leider immer noch nicht in griff bekommen. :wall:

Kann mir aus dem Code mal jemand ein laufendes Beispiel zaubern?


Gruß Celina

celinaw 7. Apr 2004 23:55

Re: PC über Netzwerk starten
 
Also hier mal der Code:

Unit1:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses WakeOnLan;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   wakeonlan('000C76719CEA');
end;

end.

WakeOnLan:
Delphi-Quellcode:
unit WakeOnLan;

interface

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: TIUDPClient;
begin
  try
    for i := 1 to 6 do begin
      lBuffer[i] := HexToInt(aMacAddress[(i * 2) - 1] + 
         aMacAddress[i * 2]);
    end;
    lBuffer[7] := $00;
    lBuffer[8] := $74;
    lBuffer[9] := $FF;
    lBuffer[10] := $FF;
    lBuffer[11] := $FF;
    lBuffer[12] := $FF;
    lBuffer[13] := $FF;
    lBuffer[14] := $FF;
    for j := 1 to 16 do begin
      for i := 1 to 6 do begin
        lBuffer[15 + (j - 1) * 6 + (i - 1)] := lBuffer[i];
      end;
    end;
    lBuffer[116] := $00;
    lBuffer[115] := $40;
    lBuffer[114] := $90;
    lBuffer[113] := $90;
    lBuffer[112] := $00;
    lBuffer[111] := $40;
    try
      lUDPClient := TIdUDPClient.Create(nil);
      lUDPClient.BroadcastEnabled := true;
      lUDPClient.Host := '255.255.255.255';
      lUDPClient.Port := 2050;
      lUDPClient.SendBuffer(lBuffer, 116);
      writeln('Trying to wake-up remote host: ' + aMacAddress);
    finally
      lUDPClient.Free;
    end;
  except
   on E: Exception do writeln('There was an error');
  end;
end;

Und hier die Fehlermeldungen:


Erzeugen
[Fehler] WakeOnLan.pas(21): Anweisungen sind im Interface-Teil nicht erlaubt
[Fehler] WakeOnLan.pas(22): Undefinierter Bezeichner: 'S'
[Fehler] WakeOnLan.pas(24): Inkompatible Typen
[Fehler] WakeOnLan.pas(46): Undefinierter Bezeichner: 'result'
[Fehler] WakeOnLan.pas(55): Bezeichner redefiniert: 'i'
[Fehler] WakeOnLan.pas(57): Undefinierter Bezeichner: 'TIUDPClient'
[Fehler] WakeOnLan.pas(58): Anweisungen sind im Interface-Teil nicht erlaubt
[Fehler] WakeOnLan.pas(61): Undefinierter Bezeichner: 'aMacAddress'
[Fehler] WakeOnLan.pas(62): Inkompatible Typen: 'String' und 'Integer'
[Fehler] WakeOnLan.pas(85): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(86): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(87): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(88): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(91): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(98): Deklaration erwartet, aber Dateiende gefunden
[Fehler] WakeOnLan.pas(10): Ungenügende Forward- oder External-Deklaration: 'HexToInt'
[Fehler] WakeOnLan.pas(53): Ungenügende Forward- oder External-Deklaration: 'WakeUPComputer'
[Fataler Fehler] Unit1.pas(24): Verwendete Unit '..\..\..\..\..\..\Wolf\Programme\Borland\Delphi7\ Projects\Wakeup\WakeOnLan.pas' kann nicht compiliert werden



Wer kann mir Helfen :gruebel: :gruebel:

Gruß SelinaW

Luckie 8. Apr 2004 00:00

Re: PC über Netzwerk starten
 
Code:
interface

uses
  WinTypes, Messages, SysUtils, Classes, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPClient;

[b]implementation[/b]

Function HexToInt(S:String): LongInt;
const
  DecDigits: Set Of '0'..'9' = ['0'..'9'];
Und dann sehen wir mal weiter. Aber wenn du noch nicht mal weißt, wie eine Delphi Unit aufgebaut ist, solltest du eventuell mit ein paar Grundlagen anfangen.

NicoDE 8. Apr 2004 00:06

Re: PC über Netzwerk starten
 
Code:
[color=red]unit[/color] WakeOnLan;

[color=red]interface[/color]

[color=red]uses[/color]
  WinTypes, Messages, SysUtils, Classes, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPClient;

// Deklarieren

procedure WakeUPComputer(aMacAddress: string);

[color=red]implementation[/color]

// Implementieren

Function HexToInt(S:String): LongInt;
const
//[snip]

kiar 8. Apr 2004 00:09

Re: PC über Netzwerk starten
 
luckie hat recht
implementation fehlt, habe ich vorhin übersehen :oops:

raik

aufruf dann natürlich
Delphi-Quellcode:
procedure TForm1.Button1click(sender :TObject);

begin
 wakeupComputer('Deine mac');
end;

celinaw 8. Apr 2004 00:32

Re: PC über Netzwerk starten
 
Hi@all

Impementation habe ich jetzt drin... aber es funzt immer noch nicht :gruebel:

@Luckie

Zitat:

Aber wenn du noch nicht mal weißt, wie eine Delphi Unit aufgebaut ist, solltest du eventuell mit ein paar Grundlagen anfangen
:oops: :oops: :oops: :duck:


Bin erst seit sechs Monaten mit Delphi am proggen :coder:

Hin und wieder merkt man das halt auch mal :angle:

Nicht böse sein.... Jeder hat mal klein angefangen.

Luckie 8. Apr 2004 00:34

Re: PC über Netzwerk starten
 
Zitat:

Zitat von celinaw
Impementation habe ich jetzt drin... aber es funzt immer noch nicht :gruebel:

Soll ich vorbeikommen und aus dir rauskitzeln, was nicht geht, wie die Fehlermeldungen lauten? :roll: Also wenn wir die helfen sollen, musst du schon etwas genauer werden.

kiar 8. Apr 2004 00:34

Re: PC über Netzwerk starten
 
welche fehlermeldungen?

celinaw 8. Apr 2004 00:39

Re: PC über Netzwerk starten
 
:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:

Sorry ...............


Delphi-Quellcode:
unit WakeOnLan;

interface

uses
  WinTypes, Messages, SysUtils, Classes, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPClient;


implementation



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: TIUDPClient;
begin
  try
    for i := 1 to 6 do begin
      lBuffer[i] := HexToInt(aMacAddress[(i * 2) - 1] + 
         aMacAddress[i * 2]);
    end;
    lBuffer[7] := $00;
    lBuffer[8] := $74;
    lBuffer[9] := $FF;
    lBuffer[10] := $FF;
    lBuffer[11] := $FF;
    lBuffer[12] := $FF;
    lBuffer[13] := $FF;
    lBuffer[14] := $FF;
    for j := 1 to 16 do begin
      for i := 1 to 6 do begin
        lBuffer[15 + (j - 1) * 6 + (i - 1)] := lBuffer[i];
      end;
    end;
    lBuffer[116] := $00;
    lBuffer[115] := $40;
    lBuffer[114] := $90;
    lBuffer[113] := $90;
    lBuffer[112] := $00;
    lBuffer[111] := $40;
    try
      lUDPClient := TIdUDPClient.Create(nil);
      lUDPClient.BroadcastEnabled := true;
      lUDPClient.Host := '255.255.255.255';
      lUDPClient.Port := 2050;
      lUDPClient.SendBuffer(lBuffer, 116);
      writeln('Trying to wake-up remote host: ' + aMacAddress);
    finally
      lUDPClient.Free;
    end;
  except
   on E: Exception do writeln('There was an error');
  end;
end;


Fehler:



Erzeugen
[Fehler] WakeOnLan.pas(61): Undefinierter Bezeichner: 'TIUDPClient'
[Fehler] WakeOnLan.pas(89): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(90): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(91): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(92): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(95): Operator oder Semikolon fehlt
[Fehler] WakeOnLan.pas(101): Deklaration erwartet, aber Dateiende gefunden
[Fataler Fehler] Unit1.pas(24): Verwendete Unit 'WakeOnLan.pas' kann nicht compiliert werden

Luckie 8. Apr 2004 00:43

Re: PC über Netzwerk starten
 
Hast du auch die Indy's installiert? Die sind Vorraussetzung damit der Code funktioniert.

NicoDE 8. Apr 2004 00:43

Re: PC über Netzwerk starten
 
Du hast vergessen die Funktion WakeUpComputer beaknnt zu machen (im Interface-Bereich deklarieren, s.o.).

kiar 8. Apr 2004 00:48

Re: PC über Netzwerk starten
 
@nicoDE,

würde es nicht reichen procedure und funktion zu tauschen?

@celina

nach den Uses
Delphi-Quellcode:
procedure WakeupComputer(aMacadress:String);

celinaw 8. Apr 2004 00:49

Re: PC über Netzwerk starten
 
:gruebel:

Zitat:

Du hast vergessen die Funktion WakeUpComputer beaknnt zu machen (im Interface-Bereich deklarieren, s.o.).
Ja, das kann sein. Aber die Fehlermeldung bleibt die selbe :gruebel:


@Luckie

Ja, die Indy´s sind Installiert bzw. ich habe Delphi 7 Professional. Da sind die ja schon bei!

Luckie 8. Apr 2004 00:50

Re: PC über Netzwerk starten
 
Wenn das alles ist, muss da gar nichte bekannt gemacht werden. HexToInt nutzt WakeUPComputer nicht. Und ihn WakeUPComputer muss nur HexToInt bejkannt sein und das ist es, da der Code davor steht.

kiar 8. Apr 2004 00:54

Re: PC über Netzwerk starten
 
@luckie,

aber dann würde er ja nicht die fehlermeldung bringen end erwartet aber deklaration gefunden.

wakeupComputer nutzt ja hextoint.

raik

Luckie 8. Apr 2004 00:55

Re: PC über Netzwerk starten
 
LOL:
Code:
lUDPClient: TI[b]d[/b]UDPClient;
Da fehlte ein Buchstabe. :roll:

Luckie 8. Apr 2004 00:57

Re: PC über Netzwerk starten
 
Zitat:

Zitat von kiar
aber dann würde er ja nicht die fehlermeldung bringen end erwartet aber deklaration gefunden.

Welche Fehlermeldung meinst du? Bei mir kompiliert das ohne, dass ich was bekannt machen muss.

kiar 8. Apr 2004 01:01

Re: PC über Netzwerk starten
 
sorry ,mein fehler

ist ja auch schon spät-> früh :?

raik

celinaw 8. Apr 2004 01:07

Re: PC über Netzwerk starten
 
:P :P


@Luckie :thuimb: :thuimb:

Gute Auge!! :wink:

So... mal testen....

melde mich gleich!

:thuimb: :thuimb:

celinaw 8. Apr 2004 01:10

Re: PC über Netzwerk starten
 
:witch: :witch: :witch: :witch: :witch: :witch: :witch:


Ihr seit klasse !!!!!!


Vielen Vielen Dank für eure Gedult! :hello:


Werde das jetzt mal in ruhe testen. Muss noch bis 6 arbeiten!!

Ihr hört nochmal von mir!


Also erst einmal Danke für eure TOLLE unterstüzung.


:cheers: :cheers: :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz