2012-02-02 21 views

答えて

0

私の以前の解決策はうまくいかなかったので、もう1つあります。マウスの通知を受け取る子ウィンドウにマウス・フックを設定するだけです。

public class AcrobatReader : AxAcroPDF 
{ 
    private const int WH_MOUSE_LL = 14; 
    private const int WM_RBUTTONDOWN = 0x0204; 

    private static LowLevelMouseProc _proc = HookCallback; 
    private static IntPtr _hookID = IntPtr.Zero; 

    public AcrobatReader() 
    { 
     _hookID = SetWindowsHookEx(WH_MOUSE_LL, _proc, FindWindow(null, "avpageview"), 0); 
    } 

    ~AcrobatReader() 
    { 
     if (_hookID != IntPtr.Zero) 
     { 
      UnhookWindowsHookEx(_hookID); 
      _hookID = IntPtr.Zero; 
     } 
    } 

    private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
    { 
     if (nCode >= 0 && (IntPtr)WM_RBUTTONDOWN == wParam) 
     { 
      return new IntPtr(1); 
     } 
     return CallNextHookEx(_hookID, nCode, wParam, lParam); 
    } 

    private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam); 

    [DllImport("user32.dll", SetLastError = true)] 
    private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId); 

    [DllImport("user32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool UnhookWindowsHookEx(IntPtr hhk); 

    [DllImport("user32.dll", SetLastError = true)] 
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); 

    [DllImport("user32.dll", SetLastError = true)] 
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 
} 
+0

私は同じことをしましたが、WM_RBUTTONDOWNイベントは全く発生しませんでした。どうしてか分かりません。 – Pers

+0

@r r、私は動作する別のソリューションで私の答えを更新しました。 – Joulukuusi

+0

ありがとうman.itはとても役に立ちました。 – Pers

関連する問題