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; 

namespace HotKeyApp
...{
public partial class Form1 : Form
...{
[System.Runtime.InteropServices.DllImport("user32.dll")] //申明API函数
public static extern bool RegisterHotKey(
IntPtr hWnd, // handle to window
int id, // hot key identifier
uint fsModifiers, // key-modifier options
Keys vk // virtual-key code
);
[System.Runtime.InteropServices.DllImport("user32.dll")] //申明API函数
public static extern bool UnregisterHotKey(
IntPtr hWnd, // handle to window
int id // hot key identifier
);
public enum KeyModifiers
...{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
public Form1()
...{
InitializeComponent();
RegisterHotKey(Handle, 100, 2, Keys.U);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
...{
UnregisterHotKey(Handle, 100); //卸载第1个快捷键
}

protected override void WndProc(ref Message m)//监视Windows消息 
...{
const int WM_HOTKEY = 0x0312; //如果m.Msg的值为0x0312那么表示用户按下了热键
switch (m.Msg)
...{
case WM_HOTKEY:
ProcessHotkey(m); //按下热键时调用ProcessHotkey()函数
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc 
}
private void ProcessHotkey(Message m)
...{
IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型
//MessageBox.Show(id.ToString());
string sid = id.ToString();
switch (sid)
...{
case "100": this.Show(); break; //
}
}
private void button1_Click(object sender, EventArgs e)
...{
this.Hide();
}
}
}
本文介绍了一个使用C#开发的简单应用程序,该程序通过注册全局热键来控制窗体的显示与隐藏。文章详细展示了如何利用.NET Framework的P/Invoke特性调用Windows API函数RegisterHotKey和UnregisterHotKey实现热键功能。
137

被折叠的 条评论
为什么被折叠?



