• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
灬伊天?
博客园    首页    新随笔    联系   管理    订阅  订阅

009-SendKeys

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Runtime.InteropServices;
  7 using System.Text;
  8 using System.Threading;
  9 using System.Windows.Forms;
 10 
 11 namespace WindowsFormsApp
 12 {
 13     public partial class FormS : Form
 14     {
 15         public FormS()
 16         {
 17             InitializeComponent();
 18             Control.CheckForIllegalCrossThreadCalls = false;
 19         }
 20         public bool KeyState { get; set; }
 21         public Thread TD { get; set; }
 22         private void FormS_Load(object sender, EventArgs e)
 23         {
 24             KeyState = false;
 25             HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Alt, Keys.F);
 26             #region 注册按键
 27             //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
 28             //HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
 29             //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
 30             //HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
 31             //注册热键Ctrl+Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
 32             //HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt | HotKey.KeyModifiers.Ctrl, Keys.D);
 33             //注册热键F5,Id号为103。
 34             //HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.None, Keys.F5);
 35             #endregion
 36         }
 37         protected override void WndProc(ref Message m)
 38         {
 39             const int WM_HOTKEY = 0x0312;
 40             //按快捷键    
 41             switch (m.Msg)
 42             {
 43                 case WM_HOTKEY:
 44                     switch (m.WParam.ToInt32())
 45                     {
 46                         case 101:
 47                             //MessageBox.Show("C++"); return;
 48                             switch (KeyState)
 49                             {
 50                                 case true:
 51                                     TD.Abort();
 52                                     KeyState = false;
 53                                     break;
 54                                 case false:
 55                                     TD = new Thread(KeyStart);
 56                                     TD.IsBackground = true;
 57                                     TD.Start();
 58                                     KeyState = true;
 59                                     break;
 60                                 default:
 61                                     break;
 62                             }
 63                             break;
 64                         default:
 65                             break;
 66                             #region 注册按键
 67                             //case 100://按下的是Shift+S   
 68                             //    this.Text = "按下的是Shift+S";
 69                             //    break;
 70                             //case 101://按下的是Ctrl+B   
 71                             //    //此处填写快捷键响应代码   
 72                             //    this.Text = "按下的是Ctrl+B";
 73                             //    break;
 74                             //case 102://按下的是Alt+D   
 75                             //    //此处填写快捷键响应代码   
 76                             //    this.Text = "按下的是Ctrl+Alt+D";
 77                             //    break;
 78                             //case 103:
 79                             //    this.Text = "F5";
 80                             //    break;
 81                             #endregion
 82                     }
 83                     break;
 84             }
 85             base.WndProc(ref m);
 86         }
 87         private void FormS_KeyUp(object sender, KeyEventArgs e)
 88         {
 89             //try
 90             //{
 91             //    if (e.Modifiers.CompareTo(Keys.Alt) == 0 && e.KeyCode == Keys.F)
 92             //    {
 93             //        MessageBox.Show("C#"); return;
 94             //        switch (KeyState)
 95             //        {
 96             //            case true:
 97             //                TD.Abort();
 98             //                KeyState = false;
 99             //                break;
100             //            case false:
101             //                TD = new Thread(KeyStart);
102             //                TD.IsBackground = true;
103             //                TD.Start();
104             //                KeyState = true;
105             //                break;
106             //            default:
107             //                break;
108             //        }
109             //    }
110             //}
111             //catch (Exception er)
112             //{
113             //    MessageBox.Show(er.ToString());
114             //}
115         }
116         public void KeyStart()
117         {
118             while (true)
119             {
120                 try
121                 {
122                     SendKeys.SendWait("{F}");
123                 }
124                 catch (Exception) { }
125                 Thread.Sleep(500 + new Random().Next(0, 500));
126             }
127         }
128     }
129     public class HotKey
130     {
131         //如果函数执行成功,返回值不为0。
132         //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
133         [DllImport("user32.dll", SetLastError = true)]
134         public static extern bool RegisterHotKey(IntPtr hWnd, int id, KeyModifiers fsModifiers, Keys vk);
135         //要定义热键的窗口的句柄
136         //定义热键ID(不能与其它ID重复)           
137         //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
138         //定义热键的内容
139 
140         [DllImport("user32.dll", SetLastError = true)]
141         public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
142         //要取消热键的窗口的句柄
143         //要取消热键的ID
144 
145         //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
146         [Flags()]
147         public enum KeyModifiers
148         {
149             None = 0,
150             Alt = 1,
151             Ctrl = 2,
152             Shift = 4,
153             WindowsKey = 8
154         }
155     }
156 }

 

posted @ 2019-10-11 00:21  灬伊天☂  阅读(186)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3