2012-03-17 14 views
1

私は、Win32 APIからメッセージを取得するためにWndProcフックを使用した後、マウスのコードを取得しようとしています。..以下 WndProc lParamからxyコードへのフック?

は私のコードは...その長くはない、と..私は勉強 を理解するのに十分な簡単なはずですこのすべて私が行くとちょうど点xとyにのlParamを変更する方法を見つけ出すことはできませんよう...

すべてのヘルプはいいだろう、感謝:)

private const int WM_LEFTBUTTONDOWN = 0x0201; 
    private const int WM_LEFTBUTTONUP = 0x0202; 
    private const int WM_MOUSEMOVE = 0x0200; 
    private const int WM_MOUSEWHEEL = 0x020A; 
    private const int WM_RIGHTBUTTONDOWN = 0x0204; 
    private const int WM_RIGHTBUTTONUP = 0x0205; 


    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnSourceInitialized(EventArgs e) 
    { 
     base.OnSourceInitialized(e); 
     HwndSource source = PresentationSource.FromVisual(this) as HwndSource; 
     source.AddHook(WndProc); 
    } 

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 

     if (msg == WM_MOUSEMOVE) 
     { 
      label1.Content = "Msg: " + msg + " wParam: " + wParam + " lParam: " + lParam; 
     } 

     return IntPtr.Zero; 
    } 

答えて

2

のx座標はです下位16ビット、次の16ビットのy。このようにそれをクラック:

int x = (short)lParam.ToInt32(); 
int y = lParam.ToInt32() >> 16; 
+0

ありがとうございます、これは完全に動作します:) –

4

あなたはPoint(int dw)コンストラクタを使用することができます:DWパラメータの下位16ビットが指定

:MSDNについてint dwパラメータから

Point point = new Point(lParam.ToInt32()); 
... 

を水平x座標と上位16ビットは、新しい点の垂直方向のy座標を指定します。

関連する問題