Ver Mensaje Individual
  #4  
Antiguo 10-12-2006
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Reputación: 18
DarkMan Va por buen camino
Problemilla de tu ejemplo

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
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita