AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wake on LAN Problem :-(

Ein Thema von TimmA · begonnen am 25. Jun 2008 · letzter Beitrag vom 28. Feb 2015
Antwort Antwort
Seite 2 von 3     12 3      
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Wake on LAN Problem :-(

  Alt 25. Jun 2008, 11:28
Ich hatte vor einiger Zeit auch mal ein solches Tool geschrieben. Ich hängs einfach mal dran, vielleicht kannst Du ja was damit anfangen.

Gruß
Michael
Angehängte Dateien
Dateityp: dpr wakeup_618.dpr (4,0 KB, 42x aufgerufen)
  Mit Zitat antworten Zitat
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#12

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 08:38
danke dir, habs mitlerweile auch hinbekommen!

eine frage noch, ich hätte gerne einen status angezeigt von dem rechner den ich "wecken" will. also ob er an ist oder aus. und das in einer grafik wiedergeben.
wie kann ich das am einfachsten realisieren? habe mich schon mal hier im forum umgeschaut ob man evtl. den rechner anpingen kann und das dann auswerten ob er antwortet oder nicht, oder geht das irgendwie viel einfacher?
<< guckt mal da ein noob
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#13

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 09:59
Anpingen könnte zu Problemen führen, wenn die Netzwerkkarte noch keine IP-Adresse hat, was leider der Standartzustand während des Bootens ist. Andere Lösungen als Warten fallen mir keine ein, außer du lötest dir einen Server den du an die Netzwerkkarte dranhängst.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 12:45
Hi,

Wenn es nur darum geht zu überprüfen ob ein Rechner im Netzwerk eingeschaltet ist oder nicht nehme ich meistens diese Funktion. Indys gehen auch aber z.B bei Konsolenanwendungen wird mir dann die Exe zu groß

Delphi-Quellcode:
unit hostalive;

interface

function IsHostAlive(Hostname: String; pTripTime: PCardinal = nil; Timeout: Integer = 1000; TTL: Integer = 255): Boolean;

implementation

uses
  Windows,
  Winsock;

type
  IP_OPTION_INFORMATION = packed record
    TTL: byte;
    TOS: byte;
    Flags: byte;
    OptionsSize: byte;
    OptionsData: pchar;
  end;
  PIP_OPTION_INFORMATION = ^IP_OPTION_INFORMATION;

  ICMP_ECHO_REPLY = packed record
    Address: in_addr;
    Status: Cardinal;
    RoundTripTime: Cardinal;
    DataSize: word;
    Reserved: word;
    Data: pointer;
    Options: IP_OPTION_INFORMATION;
  end;
  PICMP_ECHO_REPLY = ^ICMP_ECHO_REPLY;

function IcmpCreateFile(): Cardinal; stdcall; external 'Iphlpapi.dllname 'IcmpCreateFile';
function IcmpCloseHandle(IcmpHandle: Cardinal): Boolean; stdcall; external 'Iphlpapi.dllname 'IcmpCloseHandle';
function IcmpSendEcho(IcmpHandle: Cardinal; DestinationAddress: Cardinal; RequestData: Pointer; RequestSize: Word; RequestOptions: PIP_OPTION_INFORMATION; ReplyBuffer: Pointer; ReplySize: Cardinal; Timeout: Cardinal): Cardinal; stdcall; external 'Iphlpapi.dllname 'IcmpSendEcho';

function IsHostAlive(Hostname: String; pTripTime: PCardinal = nil; Timeout: Integer = 1000; TTL: Integer = 255): Boolean;
const
  SendBuffer: array[0..31] of char =
              ('p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g');
var
  WSA: TWSADATA;
  Reply: PICMP_ECHO_REPLY;
  Addr: Integer;
  hIcmp: cardinal;
  Options: IP_OPTION_INFORMATION;

  function ResolveHost(Hostname: String): Integer;
  type
    PPInAddr= ^PInAddr;
  var
    HostInfo: PHostEnt;
    T: PPInAddr;
  begin
    t:= nil;
    Result:= inet_addr(PChar(Hostname));
    if result = INADDR_NONE then begin
       HostInfo:= gethostbyname(PChar(Hostname));
       if HostInfo <> nil then
          T:= Pointer(HostInfo^.h_addr_list);
       if (T <> nil) and (T^<> nil) then begin
          Result:= T^^.S_addr;
       end;
    end;
  end;

begin
  Result:= False;
  FillChar(Options, sizeof(IP_OPTION_INFORMATION), #0);
  Reply:= nil;
  options.TTL:= TTL;
  options.TOS:= 1;
  if WSAStartUp(((0 shl 8)+2), WSA) = 0 then begin
     Addr:= ResolveHost(Hostname);
     if Addr <> INADDR_NONE then begin
        hIcmp:= IcmpCreateFile();
        if hicmp <> INVALID_HANDLE_VALUE then try
           Reply:= AllocMem(sizeof(ICMP_ECHO_REPLY)+sizeof(SendBuffer));
           IcmpSendEcho(hIcmp, Addr, @SendBuffer[0], sizeof(SendBuffer), @Options, Reply, sizeof(ICMP_ECHO_REPLY)+sizeof(SendBuffer), timeout);
           Result:= (Reply^.Status = 0);
           if Result and (pTripTime <> nil) then
              pTripTime^:= Reply^.RoundTripTime;
        finally
           IcmpCloseHandle(hIcmp);
           if Reply <> nil then
              FreeMem(Reply);
           WSACleanup();
        end;
     end else begin
        WSACleanup();
       // Hostname konnte nicht aufgelöst werden.
     end;
  end else begin
       // Winsock konnte nicht gestartet werden.
  end;
end;

end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  RTT:Cardinal;
begin
  if IsHostalive('google.de', @RTT) then
     showmessage(inttostr(RTT)+'ms');
end;
  Mit Zitat antworten Zitat
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#15

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 16:52
wenn ich das programm 1zu1 kopiere kann ich nicht kompilieren, liegt das an unseren verschiedenen delphi versionen?
<< guckt mal da ein noob
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#16

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 16:54
Zitat von TimmA:
wenn ich das programm 1zu1 kopiere kann ich nicht kompilieren, liegt das an unseren verschiedenen delphi versionen?
gut möglich, wo erhältst du denn einen Fehler?
Thomas
  Mit Zitat antworten Zitat
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#17

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 17:37
also, wenn ich den code so kopiere und einen button auf meine form ziehen will kommt:

"Fehler im Modul Unit11: Deklaration der Klasse TForm1 fehlt oder ist fehlerhaft"

bekomme ich irgendwie nicht hin das einzufügen

wenn ich ein neues Projekt einfüge steht da ja auch

type
TForm1 = class(TForm)

wenn ich die tform1 zu den anderen bei type schreibe funktioniert es nicht
<< guckt mal da ein noob
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#18

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 17:38
Mach aus TForm1 mal TForm11
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
TimmA

Registriert seit: 22. Mai 2003
Ort: Giessen
111 Beiträge
 
Delphi 7 Professional
 
#19

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 17:45
Zitat:
[Fehler] Unit1.pas(14): Undefinierter Bezeichner: 'TForm'
[Fehler] Unit1.pas(17): '=' erwartet, aber Bezeichner 'public' gefunden
[Fehler] Unit1.pas(19): ';' erwartet, aber 'END' gefunden
[Warnung] Unit1.pas(30): Text hinter dem abschließenden 'END.' wird vom Compiler ignoriert
[Fehler] Unit1.pas(5): Ungenügende Forward- oder External-Deklaration: 'IsHostAlive'
[Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
das mit der 11 hab ich ausprobiert, was habe ich falsch gemacht? (

Delphi-Quellcode:

unit hostalive;

interface

function IsHostAlive(Hostname: String; pTripTime: PCardinal = nil; Timeout: Integer = 1000; TTL: Integer = 255): Boolean;

implementation

uses
  Windows,
  Winsock;

type
    TForm11 = class(TForm)
    IP_OPTION_INFORMATION = packed record
    TTL: byte;
    TOS: byte;
    Flags: byte;
    OptionsSize: byte;
    OptionsData: pchar;
  end;
  PIP_OPTION_INFORMATION = ^IP_OPTION_INFORMATION;

  ICMP_ECHO_REPLY = packed record
    Address: in_addr;
    Status: Cardinal;
    RoundTripTime: Cardinal;
    DataSize: word;
    Reserved: word;
    Data: pointer;
    Options: IP_OPTION_INFORMATION;
  end;
  PICMP_ECHO_REPLY = ^ICMP_ECHO_REPLY;

function IcmpCreateFile(): Cardinal; stdcall; external 'Iphlpapi.dllname 'IcmpCreateFile';
function IcmpCloseHandle(IcmpHandle: Cardinal): Boolean; stdcall; external 'Iphlpapi.dllname 'IcmpCloseHandle';
function IcmpSendEcho(IcmpHandle: Cardinal; DestinationAddress: Cardinal; RequestData: Pointer; RequestSize: Word; RequestOptions: PIP_OPTION_INFORMATION; ReplyBuffer: Pointer; ReplySize: Cardinal; Timeout: Cardinal): Cardinal; stdcall; external 'Iphlpapi.dllname 'IcmpSendEcho';

function IsHostAlive(Hostname: String; pTripTime: PCardinal = nil; Timeout: Integer = 1000; TTL: Integer = 255): Boolean;
const
  SendBuffer: array[0..31] of char =
              ('p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g',
               'p', 'i', 'n', 'g', 'p', 'o', 'n', 'g');
var
  WSA: TWSADATA;
  Reply: PICMP_ECHO_REPLY;
  Addr: Integer;
  hIcmp: cardinal;
  Options: IP_OPTION_INFORMATION;

  function ResolveHost(Hostname: String): Integer;
  type
    PPInAddr= ^PInAddr;
  var
    HostInfo: PHostEnt;
    T: PPInAddr;
  begin
    t:= nil;
    Result:= inet_addr(PChar(Hostname));
    if result = INADDR_NONE then begin
       HostInfo:= gethostbyname(PChar(Hostname));
       if HostInfo <> nil then
          T:= Pointer(HostInfo^.h_addr_list);
       if (T <> nil) and (T^<> nil) then begin
          Result:= T^^.S_addr;
       end;
    end;
  end;

begin
  Result:= False;
  FillChar(Options, sizeof(IP_OPTION_INFORMATION), #0);
  Reply:= nil;
  options.TTL:= TTL;
  options.TOS:= 1;
  if WSAStartUp(((0 shl 8)+2), WSA) = 0 then begin
     Addr:= ResolveHost(Hostname);
     if Addr <> INADDR_NONE then begin
        hIcmp:= IcmpCreateFile();
        if hicmp <> INVALID_HANDLE_VALUE then try
           Reply:= AllocMem(sizeof(ICMP_ECHO_REPLY)+sizeof(SendBuffer));
           IcmpSendEcho(hIcmp, Addr, @SendBuffer[0], sizeof(SendBuffer), @Options, Reply, sizeof(ICMP_ECHO_REPLY)+sizeof(SendBuffer), timeout);
           Result:= (Reply^.Status = 0);
           if Result and (pTripTime <> nil) then
              pTripTime^:= Reply^.RoundTripTime;
        finally
           IcmpCloseHandle(hIcmp);
           if Reply <> nil then
              FreeMem(Reply, sizeof(ICMP_ECHO_REPLY)+8);
           WSACleanup();
        end;
     end else begin
        WSACleanup();
       // Hostname konnte nicht aufgelöst werden.
     end;
  end else begin
       // Winsock konnte nicht gestartet werden.
  end;
end;

end.
<< guckt mal da ein noob
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#20

Re: Wake on LAN Problem :-(

  Alt 1. Jul 2008, 17:50
omg

code:

CODE

unit hostalive;

interface

function IsHostAlive(Hostname: String; pTripTime: PCardinal = nil; Timeout: Integer = 1000; TTL: Integer = 255): Boolean;

implementation

uses
Windows,
Winsock;

type
TForm11 = class(TForm) // *wegstreich*
IP_OPTION_INFORMATION = packed record
TTL: byte;
TOS: byte;
Flags: byte;
OptionsSize: byte;
OptionsData: pchar;
end;

(SNIP)


Den ganzen "Mist" speicherst du als eigenständige Unit (.pas-Datei). Dann fügst du die Datei an dein Projekt an (über das Oderner-mit-Plus-Symbol). Nun fügst du in der entsprechenden Unit (da wo du das verwenden willst) den bezeichner "hostalive" (o.ä. hauptsache den Namen der Unit) in die Uses-Liste.
Dann mal weitersehen.

Bernhard

EDIT: Falls du grad ein wenig Zeit hast, bleib online. Ich versuch so schnell wie es geht zu antworten
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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