/// <summary> /// メッセージフックを開始 /// </summary> private void BeginHook() { // ウィンドウが操作不可なら設定はできない if (!IsActive) { EndHook(); // フック設定なしということにしておく return; } // フック設定済みなら二重には設定しない if (IsHookSet) { return; } // フックを設定 uint threadId = WinApi.GetCurrentThreadId(); IntPtr module = WinApi.GetModuleHandle(null); myHookCallback = new WinApi.HookProc(MessageCallback); myHook = WinApi.SetWindowsHookEx(WinApi.WH_GETMESSAGE, myHookCallback, module, threadId); // フック設定失敗時 if (myHook == IntPtr.Zero) { Debug.Log("SetWindowsHookEx:" + WinApi.GetLastError()); return; } IsHookSet = true; //Debug.Log("BeginHook"); }
/// <summary> /// メッセージフックを開始 /// </summary> private void BeginHook() { if (IsHookSet) { return; } if (!IsActive) { IsHookSet = false; return; } // フックを設定 uint threadId = WinApi.GetCurrentThreadId(); IntPtr module = WinApi.GetModuleHandle(null); myHookCallback = new WinApi.HookProc(MessageCallback); myHook = WinApi.SetWindowsHookEx(WinApi.WH_GETMESSAGE, myHookCallback, module, threadId); // フック設定失敗時 if (myHook == IntPtr.Zero) { Debug.Log("SetWindowsHookEx:" + WinApi.GetLastError()); return; } IsHookSet = true; Debug.Log("BeginHook"); }
/// <summary> /// 安装钩子 /// </summary> public void SetHook() { KeyBoardHookDelegate = KeyBoardHookProc; //hHook = WinAPI.SetWindowsHookEx(WinAPI.WH_KEYBOARD_LL, KeyBoardHookDelegate, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); hHook = WinApi.SetWindowsHookEx(WinApi.WH_KEYBOARD, KeyBoardHookDelegate, IntPtr.Zero, WinApi.GetCurrentThreadId()); if (hHook == IntPtr.Zero) { UnHook(); throw new Exception("钩子安装失败"); } }
/// <summary> /// メッセージフックを終了 /// </summary> private void EndHook() { if (myHook != IntPtr.Zero) { WinApi.UnhookWindowsHookEx(myHook); myHook = IntPtr.Zero; myHookCallback = null; //Debug.Log("EndHook"); } IsHookSet = false; }
private void InitializeMdiClient() { if (mdiClient != null) { mdiClient.HandleDestroyed -= new EventHandler(MdiClientHandleDestroyed); } if (parentForm == null) { return; } for (int i = 0; i < parentForm.Controls.Count; i++) { mdiClient = parentForm.Controls[i] as MdiClient; if (mdiClient != null) { ReleaseHandle(); AssignHandle(mdiClient.Handle); OnHandleAssigned(EventArgs.Empty); _mdiTabs = new List <MDITab>(); mdiClient.HandleDestroyed += new EventHandler(MdiClientHandleDestroyed); mdiClient.ControlAdded += mdiClient_ControlAdded; mdiClient.ControlRemoved += mdiClient_ControlRemoved; _dropDownFileList.Visible = false; ParentForm.Controls.Add(_dropDownFileList); try { if (_hook == IntPtr.Zero) { MouseHook = MouseHookProc; Process curProc = Process.GetCurrentProcess(); ProcessModule procModule = curProc.MainModule; _hook = WinApi.SetWindowsHookEx((int)WinApi.HOOKS.WH_MOUSE, MouseHook, IntPtr.Zero, (uint)AppDomain.GetCurrentThreadId()); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
/// <summary> /// メッセージフックを終了 /// </summary> private void EndHook() { if (myHook != IntPtr.Zero) { WinApi.UnhookWindowsHookEx(myHook); myHook = IntPtr.Zero; myHookCallback = null; // Unityだと通常はドラッグ不可のはずなので戻しても良いのかも WinApi.DragAcceptFiles(hWnd, false); Debug.Log("EndHook"); } IsHookSet = false; }
private void AttachHook() { if (_hHook == 0) { _mouseHookProcedure = LowLevelMouseProc; _hHook = WinApi.SetWindowsHookEx(WinApi.WH_MOUSE_LL, _mouseHookProcedure, IntPtr.Zero, 0); // If the SetWindowsHookEx function fails. if (_hHook == 0) { int error = Marshal.GetLastWin32Error(); MessageBox.Show("SetWindowsHookEx Failed " + error); } } else { MessageBox.Show("SetWindowsHookEx Failed - hHook was not null"); } }
public void InstallHook() { Owner.HiddenForm.Invoke((MethodInvoker)(() => { hModule = Marshal.GetHINSTANCE(AppDomain.CurrentDomain.GetAssemblies()[0].GetModules()[0]); hookDel = new WinApi.HookProc(HookProcFunction); hHook = WinApi.SetWindowsHookEx(HookType.WH_MOUSE_LL, hookDel, hModule, 0); if (hHook != IntPtr.Zero) { hookInstall = true; } else { throw new Exception("Can't install low level keyboard hook!"); } })); }
public GlobalMouseHook() { // Ensure this is not garbage collected HookProcDelegate = HookCallback; }
/// <summary> /// Use your own HookProc ? /// </summary> public CoreWindowsHook(HookType hookType, WinApi.HookProc callBackFunction) { InternalHookType = hookType; CallBackFunction = callBackFunction; }
/// <summary> /// Register to the HookInvoked event /// </summary> public CoreWindowsHook(HookType hookType) { InternalHookType = hookType; CallBackFunction = CoreHookProc; }