码迷,mamicode.com
首页 > Windows程序 > 详细

发送WIN+SAPCE键,WINDOWS,空格键

时间:2015-12-02 22:23:36      阅读:458      评论:0      收藏:0      [点我收藏+]

标签:

键盘代码部份转自:http://www.cnblogs.com/cpcpc/archive/2011/02/22/2123055.html

 

由于喜欢用CTRL+空格键切换输入法,在WIN8上有所不习惯,所以写了个小程序,当按CTRL+空格键时向系统发送WIN+空格键。

首先使用全局快捷键,监视CTRL+空格的输入,然后再发送WIN+空格键。

[DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(IntPtr hWnd, // handle to window    
         int id,            // hot key identifier    
         KeyModifiers fsModifiers,  // key-modifier options    
         Keys vk            // virtual-key code    
         );

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool UnregisterHotKey(IntPtr hWnd,  // handle to window    
         int id      // hot key identifier    
         );

        [Flags()]
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Control = 2,
            Shift = 4,
            Windows = 8
        }

/// <summary>
        /// 切换输入法
        /// </summary>
        const int hotKeyId_SwitchIME = 343;


/// <summary>
        /// 发送WIN+空格
        /// </summary>
        /// <param name="bVk"></param>
        /// <param name="bScan"></param>
        /// <param name="dwFlags"></param>
        /// <param name="dwExtraInfo"></param>
        [DllImport("user32.dll")]
        private static extern void keybd_event(byte bVk, byte bScan, long dwFlags, long dwExtraInfo);


//在Form1_Shown时注册快捷键
private void Form1_Shown(object sender, EventArgs e)
        {
Version win7ver = new Version("6.1.9999.9999");
                if (Environment.OSVersion.Version.CompareTo(win7ver) > 0)
                {
                    //ctrl+空格切换输入法
              bool       bSucc = RegisterHotKey(Handle, hotKeyId_SwitchIME, KeyModifiers.Control, Keys.Space);
                    
                }
}


//发送WIN+空格
 protected override void WndProc(ref Message m)
        {
            try
            {
                //固定的热键消息 0x0312
                const int WM_HOTKEY = 0x0312;
                switch (m.Msg)
                {
                    case WM_HOTKEY:
                        #region 判断哪个功能

                        switch (m.WParam.ToInt32())
                        {
                            
                            case hotKeyId_SwitchIME:
                                const byte VK_LWIN = 0x5B;
                                const byte VK_space = 0x20;
                                const byte KEYEVENTF_KEYUP = 0x2;
                                const byte KEYEVENTF_EXTENDEDKEY = 0x1;
                                keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
                                keybd_event(VK_space, 0, KEYEVENTF_EXTENDEDKEY, 0);
                                keybd_event(VK_space, 0, KEYEVENTF_KEYUP, 0);
                                keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
                                break;
                        }

                        #endregion
                        break;
                }
                base.WndProc(ref m);
            }
            catch { }
        }


private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //关闭时解除注册
           
            UnregisterHotKey(Handle, hotKeyId_SwitchIME);


        }

 

 

 

可在代码中的任何地方用下列值代替键盘上的键:
值 描述
0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键
0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键

A 至 Z 键与 A - Z 字母的 ASCII 码相同:
值 描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键

09 键与数字 0 - 9 的 ASCII 码相同:
值 描述
48 049 150 251 352 453 554 655 756 857 9 键

下列常数代表数字键盘上的键:
值 描述
0x60 00x61 10x62 20x63 30x64 40x65 50x66 60x67 70x68 80x69 90x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (-) 键
0x6E DECIMAL POINT (.) 键
0x6F DIVISION SIGN (/) 键

下列常数代表功能键:
值 描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键

 

发送WIN+SAPCE键,WINDOWS,空格键

标签:

原文地址:http://www.cnblogs.com/runliuv/p/5014205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!