2015-08-28 1 views
0

Вопрос сам по себе в значительной степени описывает мою общую проблему. Вот что я сделал до сих пор.Как получить координаты курсора мыши от lParam от метода обратного вызова мыши низкого уровня?

// the event is registered as following 
    mouseProc = new CallWndRetProc(MouseProc); // get keys 
    MouseProcHandle = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, IntPtr.Zero, 0); 

    // The callback method 
    public static IntPtr MouseProc(int nCode, int wParam, IntPtr lParam) 
    {    
     if (wParam == WM_LBUTTONUP && MouseProcHandle != IntPtr.Zero)     
     { 

     } 

     if (wParam == WM_MOUSEMOVE) 
     { 
      // Want to get mouse position here 
     } 

     return CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam); 
    } 

Есть ли надежный способ получить положение мыши?

примеры кода будут оценены Благодаря

+0

Marshal.PtrToStructure() для преобразования lParam в MSLLHOOKSTRUCT. Это делалось тысячи раз раньше, не изобретайте это колесо. –

ответ

1

По codeguru forum и особенно pinvoke.net вы ищете, вероятно, для (pinvoke.net again):

[StructLayout(LayoutKind.Sequential)] 
public struct MSLLHOOKSTRUCT 
{ 
    public POINT pt; 
    public int mouseData; // be careful, this must be ints, not uints (was wrong before I changed it...). regards, cmew. 
    public int flags; 
    public int time; 
    public UIntPtr dwExtraInfo; 
} 

Тогда, конечно, вы всегда можете получить текущие координаты. Здесь много всего on Stackoverflow.

+0

Большое спасибо. Я использовал MSLLHOOKSTRUCT с переменными Uint. может быть, именно там он терпит неудачу. Я попробую это и дам вам знать :) –

+0

uint/int не должен иметь большого значения. То, что вы, вероятно, хотите, это POINT. И .. если вы не хотите иметь точные координаты во время увольнения, вы также можете получить текущие координаты, что, возможно, проще (хотя они могут немного отличаться от тех, которые вы получили в сообщении). –

Смежные вопросы