Por cierto, WH_KEYBOARD? es un hook para el ratón por lo que en el ejemplo tuyo no tengo que cambiar nada (WH_MOUSE_LL)
Y bueno, probando pues si parece que funciona, pero veo algo curioso que no me gusta y es que en tu función, añadi una variable de tipo
PMouseHookStruct con la cual obtengo las coordenadas del ratón, básicamente lo que hacía con la DLL (lo que me decias tu) :
Código Delphi
[-]function MouseProc(Code: Integer; WParam:WPARAM ; LParam: LPARAM): LRESULT; stdcall;
var
DatosMouse : PMouseHookStruct;
begin
if Code = HC_ACTION then
begin
DatosMouse:=Pointer(lparam);
Form1.Label1.caption:=IntToStr(DatosMouse.pt.x);
Form1.Label2.caption:=IntToStr(DatosMouse.pt.y);
end;
Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;
El problema está en que al obtener las coordenadas, cuando coges velocidad con el ratón y llegas al límite (yo tengo una resolucion de pantalla de 800x600 asi que pongamos como ejemplo 800 en el eje X) el valor que devuelve es superior a 800 (a veces si cojo mucha velocidad me devuelve 900 y a continuación se corrige él solo a 800, supongo que es al mover el ratón en sentido Y) y en sentido contrario comienza con números negativos (al llegar a 0 comienza con -1,-2...-100)
Probé tambien usando
Código Delphi
[-]if WParam = WM_MOUSEMOVE then
para ver si se corregía el error pero parece que no, ¿Por qué cuando usaba la DLL ésto no ocurría? ¿Qué cambia? ¿Debo corregirlo yo con una subrutina que detecte si supera ese valor o estoy haciendo algo mal
?
De nuevo gracias por tu código Seoane