Utilizo una hook de mouse para obtener los handles de los objetos alm pasar el puntero del mouse por encima. paso codigo de libreria y programa.
Código Delphi
[-]
library hookmouse;
uses
Windows,
Messages;
const
CM_MANDA_DATOS = WM_USER + $1000;
type
TCompartido = record
Receptor,
wHitTestCode,
x,y,
Ventana : hwnd;
end;
PCompartido =^TCompartido;
var
HookDeMouse : HHook;
FicheroM : THandle;
Compartido : PCompartido;
function CallBackDelHook( Code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; stdcall;
var
DatosMouse : PMouseHookStruct;
Intentos : integer;
begin
if code=HC_ACTION then
begin
FicheroM:=OpenFileMapping(FILE_MAP_WRITE,False,'ElReceptor');
if FicheroM<>0 then
begin
Compartido:=MapViewOfFile(FicheroM,FILE_MAP_WRITE,0,0,0);
DatosMouse:=Pointer(lparam);
Compartido^.Ventana:=DatosMouse^.hwnd;
Compartido^.x:=DatosMouse^.pt.x;
Compartido^.y:=DatosMouse^.pt.y;
PostMessage(Compartido^.Receptor,CM_MANDA_DATOS,wParam,lParam);
UnmapViewOfFile(Compartido);
CloseHandle(FicheroM);
end;
end;
Result := CallNextHookEx(HookDeMouse, Code, wParam, lParam)
end;
procedure HookOn; stdcall;
begin
HookDeMouse:=SetWindowsHookEx(WH_MOUSE, @CallBackDelHook, HInstance , 0);
end;
procedure HookOff; stdcall;
begin
UnhookWindowsHookEx(HookDeMouse);
end;
exports
HookOn,
HookOff;
begin
end.
en el programa...........
procedure TForm1.LlegaDelHook(var message: TMessage);
var
DatosMouse : PMouseHookStruct;
NombreVentana : array [0..200] of char;
Accion : string;
begin
with Compartido^ do
begin
Label1.caption:='['+IntToStr(x)+':'+IntToStr(y)+']';
end;
GetWindowText(Compartido^.Ventana,@NombreVentana,200);
Label2.Caption:=NombreVentana;
label3.Caption:=inttostr(Compartido^.Ventana);
//aqui en label3 es donde se van mostrando los handles de los controles por los que pasa el puntero del mouse.
Lo que me interesa es obtener el handle pero de un control que esta deshabilitado.