分享

使用微信PC端的截图dll库实现微信截图功能

 求知881 2018-05-29
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace screenT
{
  public partial class ScreenForm : Form
  {
    public ScreenForm()
    {
      InitializeComponent();
    }
    private void ScreenCapture()
    {
      DLL.PrScrn();
    }
    protected override void WndProc(ref Message m)
    {
      base.WndProc(ref m);
      Hotkey.ProcessHotKey(m);
    }
    private void button1_Click(object sender, EventArgs e)
    {
      DLL.PrScrn();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
      //注册热键(窗体句柄,热键ID,辅助键,实键) 
      try
      {
        Hotkey.Regist(Handle, HotkeyModifiers.MOD_ALT, Keys.F1, ScreenCapture);
      }
      catch (Exception te)
      {
        MessageBox.Show("Alt + A 热键被占用");
      }
    }
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
      //注消热键(句柄,热键ID) 
      Hotkey.UnRegist(Handle, ScreenCapture);
    }
  }
  public class DLL
  {
    [DllImport("PrScrn.dll", EntryPoint = "PrScrn")]
    public static extern int PrScrn(); //与dll中一致 
  }
  public static class Hotkey
  {
    #region 系统api
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, Keys vk);
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    #endregion
    public delegate void HotKeyCallBackHanlder();
    private const int WM_HOTKEY = 0x312;
    private static int keyid = 10;
    private static readonly Dictionary<int, HotKeyCallBackHanlder> keymap =
      new Dictionary<int, HotKeyCallBackHanlder>();
    /// <summary>
    ///   注册快捷键
    /// </summary>
    /// <param name="hWnd">持有快捷键窗口的句柄</param>
    /// <param name="fsModifiers">组合键</param>
    /// <param name="vk">快捷键的虚拟键码</param>
    /// <param name="callBack">回调函数</param>
    public static void Regist(IntPtr hWnd, HotkeyModifiers fsModifiers, Keys vk, HotKeyCallBackHanlder callBack)
    {
      int id = keyid++;
      if (!RegisterHotKey(hWnd, id, fsModifiers, vk))
        throw new Exception("regist hotkey fail.");
      keymap[id] = callBack;
    }
    /// <summary>
    ///   注销快捷键
    /// </summary>
    /// <param name="hWnd">持有快捷键窗口的句柄</param>
    /// <param name="callBack">回调函数</param>
    public static void UnRegist(IntPtr hWnd, HotKeyCallBackHanlder callBack)
    {
      foreach (var var in keymap)
      {
        if (var.Value == callBack)
          UnregisterHotKey(hWnd, var.Key);
      }
    }
    /// <summary>
    ///   快捷键消息处理
    /// </summary>
    public static void ProcessHotKey(Message m)
    {
      if (m.Msg == WM_HOTKEY)
      {
        int id = m.WParam.ToInt32();
        HotKeyCallBackHanlder callback;
        if (keymap.TryGetValue(id, out callback))
        {
          callback();
        }
      }
    }
  }
  public enum HotkeyModifiers
  {
    MOD_ALT = 0x1,
    MOD_CONTROL = 0x2,
    MOD_SHIFT = 0x4,
    MOD_WIN = 0x8
  }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多