Estoy utilizando ganchos globales de user32.dll con dllimport en C#. El teclado uno funciona bien, pero los eventos de la rueda del mouse son un problema. Esta es mi ratón de devolución de llamada de eventos:recuperar WHEEL_DELTA de wParam en WM_MOUSEHWHEEL msg en C#
private IntPtr MouseInputCallback(
int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode < 0) return CallNextHookEx(mouseHookId, nCode, wParam, lParam);
int eventType = wParam.ToInt32();
if (eventType == WM_MOUSEHWHEEL)
{
int wheelMovement = GetWheelDeltaWParam(eventType);
}
return CallNextHookEx(mouseHookId, nCode, wParam, lParam);
}
todo va bien hasta que tenga que recuperar el valor WHEEL_DELTA que muestra qué manera y hasta qué punto la rueda se desplaza. Puesto que C# carece de la GET_WHEEL_DELTA_WPARAM macro, estoy usando el código que debe hacer el trabajo:
privado static int GetWheelDeltaWParam (int wparam) {return (int) (wparam >> 16); }
Pero la salida siempre es 0, lo que no tiene ningún sentido.
EDITAR - resultado:
MSLLHOOKSTRUCT mouseData = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
int wheelMovement = GetWheelDeltaWParam(mouseData.mouseData);
[StructLayout(LayoutKind.Sequential)]
private struct MSLLHOOKSTRUCT
{
public Point pt;
public int mouseData;
public int flags;
public int time;
public long dwExtraInfo;
}
Algo parece estar mal. ¿Comparas 'wParam' para ** equality ** con el id del mensaje, pero luego quieres que varíen los 16 mejores del mismo valor? – AakashM
Algo probablemente está mal, pero en ese caso, ¿cuál sería la solución correcta? – user1151923