![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывести компьютер из спящего режима [D7, WinXP]
Small Donkey © (2008-02-23 09:48:00)Здравствуйте, подскажите пожалуйста как програмно вывести компьютер из спящего режима?
VirEx (2008-02-24 10:11:00) [1]но это только разбудит комьютер, и в случае WOL нужно знать мак адрес заранее
VirEx (2008-02-24 10:07:00) [2]
или Wake On Lan у сетевухи, или в биосе "пробуждать от входящего звонка на модем"
function WakeOnLan(const Host:string;MAC:String):Boolean;
function HexToInt(const s: string): Integer;
begin
Result := 0;
if Length(s) <= (SizeOf(LongWord) * 2) then
Result := StrToInt('$' + s);
end;
var
WSA:TWSAData;
Addr:TSockAddrIn;
A,B:Integer;
S:TSocket;
//MAC:string;
{
Состав Magic Packet
Вначале идет так называемая “цепочка синхронизации”,
состоящая из 6 байт FF, а затем — MAC-адрес сетевой платы, повторённый 16 раз.
}
Frame:packed record
Sync:array[1..6] of Byte;
MACs:array[1..16,1..6] of Byte;
end;
begin
Result:=False;
//сначало пробуем GetIpNetTable
//MAC:=GetMacFromIP(Host);
//затем из списка
//for i:=0 to MACs.Count-1 do MAC:=MACs[i];
{
//затем через NetBios
if Length(MAC)<>12 then begin
l:=TStringList.Create;
GetMACAddresses(UpperCase(Host),l);
if l.Count>0 then MAC:=l[0];
l.Free;
end;
}
if Length(MAC)<>12 then Exit;
if WSAStartup($0101,WSA)=0 then try
S:=socket(AF_INET,SOCK_DGRAM,PF_UNSPEC);
if S<>INVALID_SOCKET then try
A:=1;
if setsockopt(S,SOL_SOCKET,SO_BROADCAST,@A,SizeOf(A))=0 then begin
FillChar(Frame.Sync,6,$FF);
for A:=1 to 6 do begin
B:=HexToInt(Copy(MAC,A*2-1,2));
Frame.MACs[1,A]:=B;
end;
for A:=2 to 16 do
Frame.MACs[A]:=Frame.MACs[1];
Addr.sin_addr.S_addr:=-1;
Addr.sin_family:=AF_INET;
Addr.sin_port:=IPPORT_ECHO;
Result:=sendto(S,Frame,SizeOf(Frame),0,Addr,SizeOf(Addr))=SizeOf(Frame);
end;
finally
closesocket(S);
end;
finally
WSACleanup;
end;
end;
Cobalt (2008-02-24 09:56:00) [3]Только внешним механизмом :)
Начиная с человека и заканчивая спецустройством, включающимся в ethernet-разъем по электронному или механическому будильнику :)
Или какое-нито механическое устройство, нажимающее кнопку питания.
{RASkov} (2008-02-23 17:00:00) [4]> [0] Small Donkey (23.02.08 09:48)
В спящем режиме ни одна программа не выполняется, ибо питание отключено и в оперативной памяти ничего нет...
Ну и как компьютер вывести ПРОГРАММНО, когда программа не работает????
{RASkov} (2008-02-23 16:47:00) [5]> вывести компьютер из спящего режима?
Съимитировать пушечный выстрел... может проснется...)
no (2008-02-23 10:15:00) [6]на кнопку нажать. программно.