Autor Beitrag
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 09.08.02 10:55 
Hi,
ich suche eine Möglichkeit einen Rechner via LAN hochzufahren. Die Netzwerkkarte alsauch der Rechner unterstützen diese Funktion. Ich weiß, dass irgendeine Zeichenkette an die Netzwerkkarte gesendet werden muss, weiß aber nicht welche bzw. wie. Kann mir da jemand helfen?

maxk
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 09.08.02 11:08 
maxk hat folgendes geschrieben:
{...} irgendeine Zeichenkette an die Netzwerkkarte gesendet werden muss, weiß aber nicht welche {...}
Schau doch mal in das Handbuch der Netzwerkkarte. Wenn die Karte so eine Funktion bietet sollte diese auch beschrieben sein!

Gruß
TINO
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 09.08.02 12:11 
Ich habe im Handbuch schon nachgeschaut, aber nur wenige Hersteller schreiben solche Daten in ihre Handbücher. Außerdem ist das größere Problem immernoch das Sender der Zeichenkette.
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Fr 09.08.02 13:54 
ein blick auf die herstellerseite kann auch nicht schaden :wink:

_________________
Viele Grüße
Jakob
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Fr 09.08.02 19:01 
Hi,

der String, den du übergeben musst nennt sich "Magic Packet".
Dieser setzt sich zusammen aus 6x FF und 16x der MAC-Adresse.
So, das ist das was ich mir gemerkt habe. Wie du das an die Karte schickst weiß ich nicht, jedoch geht das nicht über TCP/IP, denn es muss direkt zum NDIS-Treiber.
Vielleicht geht's über "Winsock2 raw packet"?

Gruß
mcbrunox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 92



BeitragVerfasst: Fr 07.02.03 14:10 
wie versprochen der source:
mit getmacadress bekommst du dein MAC Adresse der Netzcard und dann wakeup2.Stell im Bios des hochzufahrenden Rechner alle eigenschaften von WakeUp auf true<<<falls dieses es unterstützt, sonst gehts auch nicht.
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
function GetMACAdress: string;
var
  NCB: PNCB;
  Adapter: PAdapterStatus;

  URetCode: PChar;
  RetCode: char;
  I: integer;
  Lenum: PlanaEnum;
  _SystemID: string;
  TMPSTR: string; 
begin 
  Result    := ''; 
  _SystemID := ''; 
  Getmem(NCB, SizeOf(TNCB)); 
  Fillchar(NCB^, SizeOf(TNCB), 0); 

  Getmem(Lenum, SizeOf(TLanaEnum)); 
  Fillchar(Lenum^, SizeOf(TLanaEnum), 0); 

  Getmem(Adapter, SizeOf(TAdapterStatus)); 
  Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);

  Lenum.Length    := chr(0);
  NCB.ncb_command := chr(NCBENUM); 
  NCB.ncb_buffer  := Pointer(Lenum);
  NCB.ncb_length  := SizeOf(Lenum);
  RetCode         := Netbios(NCB);

  i := 0; 
  repeat 
    Fillchar(NCB^, SizeOf(TNCB), 0); 
    Ncb.ncb_command  := chr(NCBRESET); 
    Ncb.ncb_lana_num := lenum.lana[I];
    RetCode          := Netbios(Ncb);

    Fillchar(NCB^, SizeOf(TNCB), 0); 
    Ncb.ncb_command  := chr(NCBASTAT);
    Ncb.ncb_lana_num := lenum.lana[I]; 
    // Must be 16
    Ncb.ncb_callname := '*               '; 

    Ncb.ncb_buffer := Pointer(Adapter); 

    Ncb.ncb_length := SizeOf(TAdapterStatus);
    RetCode        := Netbios(Ncb);
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]... 
    if (RetCode = chr(0)) or (RetCode = chr(6)) then 
    begin 
      _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' + 
        IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' + 
        IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' + 
        IntToHex(Ord(Adapter.adapter_address[5]), 2); 
    end;
    Inc(i); 
  until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
  FreeMem(NCB); 
  FreeMem(Adapter); 
  FreeMem(Lenum);
  GetMacAdress := _SystemID;
end;

procedure wakeup2(ss:string);
var
  Data,temp: string;
  k, n: integer;
begin
  Data := '';
  for k := 0 to 5 do
  begin
    Data := Data + Chr(StrToInt('$FF'));  // 6x add a FF / 6x ein FF hinzufügen
  end;
  temp := StringReplace(ss, '-', '', [rfReplaceAll]);
  for k := 0 to 15 do
  begin
    temp := StringReplace(ss, '-', '', [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;
  hase.Host:='255.255.255.255';
  hase.port:=80;
  hase.Send(Data);  // Send it / Verschick es
end;


musst nur noch den TIdUDPClient auf die Form ziehen.
Oft ist es hilfreich seiten dieser Art zu besuchen www.swissdelphicenter.ch/de/tipsindex.php
auch hier wird man fündig
gruss
bruno