首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c# 快捷键功能 在应用模块输出 没事 类型 输出就无效了 ?

c# 快捷键功能 在应用模块输出 没事 类型 输出就无效了 ?

提问于 2020-12-10 23:26:28
回答 0关注 0查看 148

c# 快捷键功能 在应用模块输出 没事 类型 输出就无效了 代码如下: using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Collections;

namespace WindowsFormsApplication1

{ public delegate void HotkeyEventHandler(int HotKeyID);

public class Hotkey : System.Windows.Forms.IMessageFilter

{

Hashtable keyIDs = new Hashtable();

IntPtr hWnd;

static public int Hotkey1;

public event HotkeyEventHandler OnHotkey;

public enum KeyFlags

{

MOD_ALT = 0x1,

MOD_CONTROL = 0x2,

MOD_SHIFT = 0x4,

MOD_WIN = 0x8

}

[DllImport("user32.dll")]

public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk); [DllImport("user32.dll")]

public static extern UInt32 UnregisterHotKey(IntPtr hWnd, UInt32 id);

[DllImport("kernel32.dll")]

public static extern UInt32 GlobalAddAtom(String lpString);

[DllImport("kernel32.dll")]

public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom);

public Hotkey(IntPtr hWnd)

{

this.hWnd = hWnd;

Application.AddMessageFilter(this);

}

public int RegisterHotkey(Keys Key, KeyFlags keyflags)

{

UInt32 hotkeyid = GlobalAddAtom(System.Guid.NewGuid().ToString());

RegisterHotKey((IntPtr)hWnd, hotkeyid, (UInt32)keyflags, (UInt32)Key);

keyIDs.Add(hotkeyid, hotkeyid);

return (int)hotkeyid;

}

public void UnregisterHotkeys()

{

Application.RemoveMessageFilter(this);

foreach (UInt32 key in keyIDs.Values)

{

UnregisterHotKey(hWnd, key);

GlobalDeleteAtom(key);

}

}

public bool PreFilterMessage(ref System.Windows.Forms.Message m)

{

if (m.Msg == 0x312)

{

if (OnHotkey != null)

{

foreach (UInt32 key in keyIDs.Values)

{

if ((UInt32)m.WParam == key)

{

OnHotkey((int)m.WParam);

return true;

}

}

}

}

return false;

}

}

}

2、在窗体中创建过程,并在加载时间中写入代码,完整代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace WindowsFormsApplication1
  10. {
  11. public partial class Form1 : Form
  12. {
  13. public Form1()
  14. {
  15. InitializeComponent();
  16. }
  17. public void OnHotkey(int HotkeyID) //alt+z隐藏窗体,再按显示窗体。
  18. {
  19. if (HotkeyID == Hotkey.Hotkey1)
  20. {
  21. if (this.Visible == true)
  22. this.Visible = false;
  23. else
  24. this.Visible = true;
  25. }
  26. else
  27. {
  28. this.Visible = false;
  29. }
  30. }
  31. private void Form1_Load(object sender, EventArgs e)
  32. {
  33. Hotkey hotkey;
  34. hotkey = new Hotkey(this.Handle);
  35. Hotkey.Hotkey1 = hotkey.RegisterHotkey(System.Windows.Forms.Keys.Z, Hotkey.KeyFlags.MOD_ALT); //定义快键(alt+z)
  36. hotkey.OnHotkey += new HotkeyEventHandler(OnHotkey);
  37. }
  38. }
代码语言:javascript
复制
     

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档