public MouseHook(IntPtr hwnd) { // デリゲートを変数に入れて参照しないとGCに回収されることがある? hookDelegate = MouseHookDelegate; uint processId; uint threadId = Win32API.GetWindowThreadProcessId(hwnd, out processId); hook = Win32API.SetWindowsHookEx(HookType.WH_MOUSE, hookDelegate, IntPtr.Zero, (int)threadId); }
/// <summary> /// グローバルフックを開始 /// </summary> /// <returns></returns> public static bool Set() { if (hHook == IntPtr.Zero) { HookProcedureDelegate HookProc = KeyBoardHookProc; GCHandle.Alloc(HookProc, GCHandleType.Normal); using (Process p = Process.GetCurrentProcess()) using (ProcessModule m = p.MainModule) { hHook = SetWindowsHookEx(HookType.WH_HOOK_LL, HookProc, GetModuleHandle(m.ModuleName), 0); } return(true); } else { return(false); } }
/// <summary> /// グローバルフックを開始 /// </summary> /// <returns></returns> public static bool Set() { if (hHook == IntPtr.Zero) { HookProcedureDelegate HookProc = MouseHookProc; GCHandle.Alloc(HookProc, GCHandleType.Normal); using (Process p = Process.GetCurrentProcess()) using (ProcessModule m = p.MainModule) hHook = SetWindowsHookEx((int)HookType.WH_MOUSE_LL, HookProc, m.BaseAddress, 0); if (hHook == IntPtr.Zero) { return(false); } return(true); } else { return(false); } }
public static extern IntPtr SetWindowsHookEx(HookType idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProcedureDelegate lpfn, IntPtr hMod, int dwThreadId);
private static extern IntPtr SetWindowsHookEx(int idHook, HookProcedureDelegate lpfn, IntPtr hInstance, int ThreadId);
public static extern IntPtr SetWindowsHookEx(int _nHook, HookProcedureDelegate _lpfn, IntPtr _hInstance, int _nThreadId);
private static extern IntPtr SetWindowsHookEx(HookType hooktype, HookProcedureDelegate callback, IntPtr hMod, UInt32 dwThreadId);
public static extern IntPtr SetWindowsHookEx(WHConstants idHook, HookProcedureDelegate lpfn, IntPtr hInstance, int threadId);