Cita:
|
Empezado por seoane
cuando se pulsa Ctrl+Alt+Sup windows manda el mensaje WM_HOTKEY a una ventana del proceso winlogon.exe. Pues bien, hasta ahora he conseguido estar en el mismo desktop que esa ventana
|
Pues he estado haciendo varias pruebas y no hay manera de obtener un handle bueno en:
Código Delphi
[-]Desktop:= OpenDesktop('Winlogon', 0, FALSE, MAXIMUM_ALLOWED);
Con diferentes parámetros e incluso ejecutándolo como servicio, siempre Desktop me devuelve CERO, con lo cual, la jodi** clase SAS.. no la voy a ver nunca...
Al menos ya me he aclarado un poco con el tema de los desktop y para verlo con mis propios ojos he encontrado este código que es muy ilustrativo y sencillo:
Código Delphi
[-]
function EnumDesktopProc(lpszDesktop:LPTSTR;lParam:LPARAM):Boolean; stdcall;
Var Clase : Array[0..200] of char;
begin
Form1.Treeview1.Items.AddChild(Form1.Treeview1.Items.Item[lParam],lpszDesktop).AbsoluteIndex;
result:=true;
end;
function EnumWindowStationProc(lpszWindowStation:LPTSTR; lParam:LPARAM): Boolean; stdcall;
begin
EnumDesktops(OpenWindowStation(lpszWindowStation,false,GENERIC_READ),@EnumDesktopProc,Form1.Treeview 1.Items.AddChild(Form1.Treeview1.Items.Item[lParam],lpszWindowStation).AbsoluteIndex);
result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Treeview1.Items.Clear;
EnumWindowStations(@EnumWindowStationProc,Treeview1.Items.AddChildFirst(nil,'PC').AbsoluteIndex);
Treeview1.FullExpand;
end;
Al final, a mí también me aburre el tema, así que dejo de curiosear, me parece demasiado esfuerzo para tan poca cosa... De hecho hay componentes y Dll GINA para meter mano al asunto, si se me diera el caso de necesitarlo, retomaría el asunto... pero lo dudo...