コード例 #1
0
        /// <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");
        }
コード例 #2
0
    /// <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");
    }
コード例 #3
0
 /// <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("钩子安装失败");
     }
 }
コード例 #4
0
        /// <summary>
        /// メッセージフックを終了
        /// </summary>
        private void EndHook()
        {
            if (myHook != IntPtr.Zero)
            {
                WinApi.UnhookWindowsHookEx(myHook);
                myHook         = IntPtr.Zero;
                myHookCallback = null;

                //Debug.Log("EndHook");
            }
            IsHookSet = false;
        }
コード例 #5
0
            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);
                        }
                    }
                }
            }
コード例 #6
0
    /// <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");
            }
        }
コード例 #8
0
        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!");
                }
            }));
        }
コード例 #9
0
        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");
            }
        }
コード例 #10
0
 public GlobalMouseHook()
 {
     // Ensure this is not garbage collected
     HookProcDelegate = HookCallback;
 }
コード例 #11
0
ファイル: CoreWindowsHook.cs プロジェクト: devjerome/3P
 /// <summary>
 /// Use your own HookProc ?
 /// </summary>
 public CoreWindowsHook(HookType hookType, WinApi.HookProc callBackFunction)
 {
     InternalHookType = hookType;
     CallBackFunction = callBackFunction;
 }
コード例 #12
0
ファイル: CoreWindowsHook.cs プロジェクト: devjerome/3P
 /// <summary>
 /// Register to the HookInvoked event
 /// </summary>
 public CoreWindowsHook(HookType hookType)
 {
     InternalHookType = hookType;
     CallBackFunction = CoreHookProc;
 }