Example #1
0
        /// <summary>
        /// 取消revit操作
        /// </summary>
        public static void CancelRevitOperate()
        {
            byte bVk      = 27;
            int  dwFlags  = 0;
            int  dwFlags2 = 2;

            MethodForWin32.keybd_event(bVk, 0, dwFlags, 0);
            MethodForWin32.keybd_event(bVk, 0, dwFlags2, 0);
        }
Example #2
0
        /// <summary>
        /// 弹窗位置随revit
        /// </summary>
        public System.Drawing.Point GetPointX(IntPtr intPtr)
        {
            LocationRect rect = new LocationRect();
            // IntPtr ptr = comboxHandle.Mng.SearchDialog(intPtr, "MDIClient", 0);
            var mdi = MethodForWin32.FindWindowEx(intPtr, IntPtr.Zero, "MDIClient", null);

            GetWindowRect(mdi, ref rect);
            int width  = rect.Right - rect.Left;
            int height = rect.Bottom - rect.Top;
            int x      = rect.Left;
            int y      = rect.Top;

            return(new System.Drawing.Point(x, y));
        }
Example #3
0
        /// <summary>
        /// 加载钩子
        /// </summary>
        public void SetHook()
        {
            if (KeyboardHookProcdelegate == null)
            {
                KeyboardHookDelegate = new MethodForWin32.HookProc(KeyboardHookProc);
            }
            else
            {
                KeyboardHookDelegate = new MethodForWin32.HookProc(KeyboardHookProcdelegate);
            }
            Process cProcess = Process.GetCurrentProcess();

            ProcessModule cModule = cProcess.MainModule;

            var mh = MethodForWin32.GetModuleHandle(cModule.ModuleName);

            hHook = MethodForWin32.SetWindowsHookEx(MethodForWin32.WH_KEYBOARD_LL, KeyboardHookDelegate, mh, 0);
        }
Example #4
0
        private List <Keys> preKeysList = new List <Keys>();//存放被按下的控制键,用来生成具体的键

        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            try
            {
                Keys keyData = new Keys();
                //如果该消息被丢弃(nCode<0)或者没有事件绑定处理程序则不会触发事件

                if ((nCode >= 0) && (OnKeyDownEvent != null || OnKeyUpEvent != null || OnKeyPressEvent != null))
                {
                    MethodForWin32.KeyboardHookStruct KeyDataFromHook = (MethodForWin32.KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(MethodForWin32.KeyboardHookStruct));

                    keyData = (Keys)KeyDataFromHook.vkCode;

                    //按下控制键

                    if ((OnKeyDownEvent != null || OnKeyPressEvent != null) && (wParam == MethodForWin32.WM_KEYDOWN || wParam == MethodForWin32.WM_SYSKEYDOWN))
                    {
                        if (IsCtrlAltShiftKeys(keyData) && preKeysList.IndexOf(keyData) == -1)
                        {
                            preKeysList.Add(keyData);
                        }
                    }

                    //WM_KEYDOWN和WM_SYSKEYDOWN消息,将会引发OnKeyDownEvent事件

                    if (OnKeyDownEvent != null && (wParam == MethodForWin32.WM_KEYDOWN || wParam == MethodForWin32.WM_SYSKEYDOWN))
                    {
                        KeyEventArgs e = new KeyEventArgs(GetDownKeys(keyData));



                        int reslut = OnKeyDownEvent(this, e);
                        if (reslut == 1)
                        {
                            return(1);
                        }
                    }

                    //WM_KEYDOWN消息将引发OnKeyPressEvent

                    if (OnKeyPressEvent != null && wParam == MethodForWin32.WM_KEYDOWN)
                    {
                        byte[] keyState = new byte[256];

                        MethodForWin32.GetKeyboardState(keyState);


                        byte[] inBuffer = new byte[2];

                        if (MethodForWin32.ToAscii(KeyDataFromHook.vkCode, KeyDataFromHook.scanCode, keyState, inBuffer, KeyDataFromHook.flags) == 1)
                        {
                            KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]);

                            OnKeyPressEvent(this, e);
                        }
                    }

                    //松开控制键

                    if ((OnKeyDownEvent != null || OnKeyPressEvent != null) && (wParam == MethodForWin32.WM_KEYUP || wParam == MethodForWin32.WM_SYSKEYUP))
                    {
                        if (IsCtrlAltShiftKeys(keyData))
                        {
                            for (int i = preKeysList.Count - 1; i >= 0; i--)
                            {
                                if (preKeysList[i] == keyData)
                                {
                                    preKeysList.RemoveAt(i);
                                }
                            }
                        }
                    }

                    //WM_KEYUP和WM_SYSKEYUP消息,将引发OnKeyUpEvent事件

                    if (OnKeyUpEvent != null && (wParam == MethodForWin32.WM_KEYUP || wParam == MethodForWin32.WM_SYSKEYUP))
                    {
                        KeyEventArgs e = new KeyEventArgs(GetDownKeys(keyData));

                        OnKeyUpEvent(this, e);
                    }
                }
                if (KeyList.Count > 0)
                {
                    bool keyFlag = false;
                    foreach (var key in KeyList)
                    {
                        if (keyData == key)
                        {
                            keyFlag = true;
                            break;
                        }
                    }
                    if (keyFlag)
                    {
                        return(1);
                    }
                    else
                    {
                        return(MethodForWin32.CallNextHookEx(hHook, nCode, wParam, lParam));
                    }
                }
                else
                {
                    return(MethodForWin32.CallNextHookEx(hHook, nCode, wParam, lParam));
                }
            }
            catch (Exception ex)
            {
                UnHook();
                throw new Exception("获取按键信息异常");
            }
        }
Example #5
0
 /// <summary>
 /// 卸载钩子
 /// </summary>
 public void UnHook()
 {
     MethodForWin32.UnhookWindowsHookEx(hHook);
 }
Example #6
0
        /// <summary>
        /// 设置revit焦点
        /// </summary>
        public static void SetFocusToRevit(IntPtr handle)
        {
            int wMsg = 7;

            MethodForWin32.SendMessage(handle, wMsg, IntPtr.Zero, IntPtr.Zero);
        }