using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics; namespace WebClick_Tool
{
public class KeyPress_o
{
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
static HookProc KeyBoardHookProcedure; //设置钩子
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll")]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name); public static void Hook_Start()
{
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
//如果设置钩子失败.
if (hHook == 0)
{
Hook_Clear();
}
}
} /// <summary>
/// 取消钩子事件
/// </summary>
public static void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
} public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
Keys k = (Keys)Enum.Parse(typeof(Keys), kbh.vkCode.ToString());
switch (k)
{
case Keys.F2:
if (kbh.flags == 0)
{
// 这里写按下后做什么事
//Main.GB = true;
MainForm.Fs(FormBorderStyle.FixedSingle);
MainForm.StopAll = true;
MainForm.DisMes("停止...");
MainForm.Enb(true);
}
else if (kbh.flags == 128)
{
//放开后做什么事
}
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
}
}

最新文章

  1. Hibernate框架简述 内部资料 请勿转载 谢谢合作
  2. WP老杨解迷:如何获得更多的应用评价和解读内容刷新
  3. HDU 3351
  4. [转]Golang- import 导入包的语法
  5. Mongo DB 安装-及分布式集群部署(初稿)
  6. Lucene 4.x实践1
  7. jquery.cookie用法详细解析
  8. [Ioi2005]River
  9. asp 域名跳转
  10. Python的基础--对象
  11. GCD(1222)Wolf and Rabbit
  12. Vxlan与网卡offload性能
  13. Java基础——集合源码解析 List List 接口
  14. img之间的间隙问题
  15. hashChange &amp; url change &amp; QRCode &amp; canvas to image
  16. Jmeter转换成中文模式
  17. Fedora 系统屏幕亮度修改
  18. Day033--Python--进程
  19. [转载]linux awk命令详解
  20. Android------------------RecyclerView学习

热门文章

  1. Java 语言基础 01
  2. Protobuf在Cmake中的正确使用
  3. LNMP配置——Nginx配置 —— 用户认证
  4. 一篇看懂JVM底层详解,利用class反编译文件了解文件执行流程
  5. python基础学习之函数进阶【匿名函数、作用域关系、闭包、递归】
  6. Java中的Set集合
  7. 【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法
  8. idea报错Selected Java version 11 is not supported by SDK (maximum 8)
  9. 用Python优雅的写出送给女儿的藏头诗
  10. 系统编程-信号-信号发送kill、raise、alarm