在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转自:http://blog.csdn.net/xiahn1a/article/details/42561015 这里需要引用到“user32.dll”。对于Win32的API,调用起来还是需要dllimport的。 我们声明一个Hotkey类,导入相应的方法。 class HotKey { //调用WIN32的API [DllImport("user32.dll", SetLastError = true)] //声明注册快捷键方法,方法实体dll中。参数为窗口句柄,快捷键自定义ID,Ctrl,Shift等功能键,其他按键。 public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk); [DllImport("user32.dll", SetLastError = true)] //注销快捷键方法的声明。 public static extern bool UnregisterHotKey(IntPtr hWnd, int id); } 在程序开始,Windows_Loaded方法中就要对快捷键进行注册。 方法是首先获取窗口句柄。可能C#的程序员对于句柄这个概念比较陌生,因为语言的高度封装。但是因为我们调用的是Win32的方法,还是要自己一步一步去做的。 然后再注册表中注册一个键值,添加hook监听窗口事件。通过重写winproc,相应键盘快捷键。 这一部分都是Win32程序设计的内容。 /// <summary> /// 窗体建立完成时调用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Loaded(object sender, RoutedEventArgs e) { Handle = new WindowInteropHelper(this).Handle; //获取窗口句柄 RunHotKey(); //注册并监听HotKey } /// <summary> /// 添加快捷键监听 /// </summary> private void RunHotKey() { RegisterHotKey(); //注册截图快捷键 HwndSource source = HwndSource.FromHwnd(Handle); if (source != null) source.AddHook(WndProc); //添加Hook,监听窗口事件 } /// <summary> /// 注册快捷键 /// </summary> private void RegisterHotKey() { //101为快捷键自定义ID,0x0002为Ctrl键, 0x0001为Alt键,或运算符|表同时按住两个键有效,0x41为A键。 bool isRegistered = HotKey.RegisterHotKey(Handle, 101, (0x0002 | 0x0001), 0x41); if (isRegistered == false) { System.Windows.MessageBox.Show("截图快捷键Ctrl+Alt+A被占用", "警告", MessageBoxButton.OK, MessageBoxImage.Warning); } } /// <summary> /// 重写WndProc函数,类型为虚保护,响应窗体消息事件 /// </summary> /// <param name="hwnd"></param> /// <param name="msg">消息内容</param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <param name="handled">是否相应完成</param> /// <returns></returns> protected virtual IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { switch (msg) { //0x0312表示事件消息为按下快捷键 case 0x0312: CatchScreen(); break; } return IntPtr.Zero; }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论