5 到第4点为止,截图的功能已经分析完了,之后就是当我们使用QQ截图的时候,我们除了可以点击聊天窗口中的截图按钮来进行截图外,还可以通过按下Alt+Ctrl+A来进行截图,要实现这个功能的思路也很简单——即当聊天窗体加载的时候对热键(程序中我定义的热键是“Alt+Ctrl+C”)进行注册(此时调用了Win32中RegisterHotKey方法来完成热键的注册),当聊天窗体关闭时进行对热键的卸载,防止对热键进行多次注册,此时调用Win32中的UnregisterHotKey方法来完成,具体的实现代码为:
/// <summary>
/// 窗体加载事件处理
/// 在窗体加载时注册热键
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 聊天窗体_Load(object sender, EventArgs e)
{
uint ctrlHotKey = (uint)(KeyModifiers.Alt|KeyModifiers.Ctrl);
// 注册热键为Alt+Ctrl+C, "100"为唯一标识热键
HotKey.RegisterHotKey(Handle, 100, ctrlHotKey, Keys.C);
}
/// <summary>
/// 窗体关闭时处理程序
/// 窗体关闭时取消热键注册
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 聊天窗体_FormClosing(object sender, FormClosingEventArgs e)
{
// 卸载热键
HotKey.UnregisterHotKey(Handle, 100);
}
#endregion
// 热键按下执行的方法
private void GlobalKeyProcess()
{
this.WindowState = FormWindowState.Minimized;
// 窗口最小化也需要一定时间
Thread.Sleep(200);
btnCutter.PerformClick();
}
/// <summary>
/// 重写WndProc()方法,通过监视系统消息,来调用过程
/// 监视Windows消息
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
//如果m.Msg的值为0x0312那么表示用户按下了热键
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToString() == "100")
{
GlobalKeyProcess();
}
break;
}
// 将系统消息传递自父类的WndProc
base.WndProc(ref m);
}
实现效果
上面已经介绍了实现QQ截图的一个思路的,朋友们是不是迫不及待想看看该程序的一个效果了?下面就通过一个动画来让大家更形象地看到程序的运行效果的:











