Cita:
Empezado por roman
Aunque el SDK indica que puede usarse ChildWindowFromPoint para esos casos. Claro que si la ventana deshabilitada es la ventana padre pues...
|
Siempre con la última palabra
Es verdad, ChildWindowFromPoint puede obtener el handle de una ventana deshabilitada, pero primero necesitamos tener el handle de su padre, o en su caso abuelos
Pero eso lo podemos solucionar fácilmente con un bonito bucle. La cosa quedaría así:
Código Delphi
[-]
const
WH_MOUSE_LL = 14;
type
ULONG_PTR = ULONG;
TMSLLHOOKSTRUCT = record
pt: TPoint;
mouseData: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: ULONG_PTR;
end;
PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;
var
MouseHook: HHook;
function HandleFromPoint(P: TPoint): THandle;
var
hWnd: THandle;
ClientP: TPoint;
begin
hWnd:= WindowFromPoint(P);
repeat
Result:= hWnd;
ClientP:= P;
if Windows.ScreenToClient(hWnd,ClientP) then
hwnd:= ChildWindowFromPoint(hWnd,ClientP);
until (hWnd = 0) or (Result = hWnd);
end;
function MouseProc(Code: Integer; WParam, LParam: DWORD): LRESULT; stdcall;
begin
if (Code = HC_ACTION) and (WParam = WM_MOUSEMOVE) then
begin
frmMain.Caption:= IntToStr(HandleFromPoint(PMSLLHOOKSTRUCT(lParam).pt));
end;
Result := CallNextHookEx(MouseHook, Code, WParam, LParam);
end;
Te dejo todo esto envuelto para regalo
, en este zip: