C#实现属于自己的QQ截图工具

2019-12-30 12:03:07于海丽

  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截图的一个思路的,朋友们是不是迫不及待想看看该程序的一个效果了?下面就通过一个动画来让大家更形象地看到程序的运行效果的:

C#,QQ截图工具