键盘 计算机代码,键盘钩子示例[通俗易懂]

键盘 计算机代码,键盘钩子示例[通俗易懂]#region自定义事件//////Hooksthestart.///publicvoidHook_Start(){//安装键盘钩子if(hHook==0){KeyBoardHookProcedure=newHookProc(KeyBoardHookProc);hHook=SetWindowsHookEx(WH_KEYBOARD_LL,KeyBoardHookPr…

大家好,又见面了,我是你们的朋友全栈君。

#region 自定义事件

///

/// Hooks the start.

///

public 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();

}

}

}

//取消钩子事件

///

/// Hooks the clear.

///

/// UnhookWindowsHookEx failed.

public void Hook_Clear()

{

bool retKeyboard = true;

if (hHook != 0)

{

retKeyboard = UnhookWindowsHookEx(hHook);

hHook = 0;

}

//如果去掉钩子失败.

if (!retKeyboard) throw new Exception(“UnhookWindowsHookEx failed.”);

}

//这里可以添加自己想要的信息处理

///

/// Keys the board hook proc.

///

/// The n code.

/// The w parameter.

/// The l parameter.

/// System.Int32.

public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)

{

return 1;

}

#endregion 自定义事件

#region 暂时屏幕按键

//委托

public delegate int HookProc(int nCode, int wParam, IntPtr lParam);

///

/// The h hook

///

private static int hHook = 0;

///

/// The wh keyboard ll

///

public const int WH_KEYBOARD_LL = 13;

//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。

///

/// The key board hook procedure

///

private HookProc KeyBoardHookProcedure;

///

/// Class KeyBoardHookStruct.

///

/// 键盘Hook结构函数

[StructLayout(LayoutKind.Sequential)]

public class KeyBoardHookStruct

{

///

/// The vk code

///

public int vkCode;

///

/// The scan code

///

public int scanCode;

///

/// The flags

///

public int flags;

///

/// The time

///

public int time;

///

/// The dw extra information

///

public int dwExtraInfo;

}

#region DllImport

//设置钩子

///

/// Sets the windows hook ex.

///

/// The identifier hook.

/// The LPFN.

/// The h instance.

/// The thread identifier.

/// System.Int32.

[DllImport(“user32.dll”)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

///

/// Unhooks the windows hook ex.

///

/// The identifier hook.

/// true if XXXX, false otherwise.

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

//抽掉钩子

public static extern bool UnhookWindowsHookEx(int idHook);

///

/// Calls the next hook ex.

///

/// The identifier hook.

/// The n code.

/// The w parameter.

/// The l parameter.

/// System.Int32.

[DllImport(“user32.dll”)]

//调用下一个钩子

public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);

///

/// Gets the current thread identifier.

///

/// System.Int32.

[DllImport(“kernel32.dll”)]

public static extern int GetCurrentThreadId();

///

/// Gets the module handle.

///

/// The name.

/// IntPtr.

[DllImport(“kernel32.dll”)]

public static extern IntPtr GetModuleHandle(string name);

#endregion DllImport

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138955.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • YUI Compressor完成代码混淆示例「建议收藏」

    YUI Compressor完成代码混淆示例「建议收藏」YUICompressor相关信息官网GitHub地址混淆单个js一般命令,java-jaryuicompressor-x.y.z.jarmyfile.js-omyfile-min.js若出现编码错误,就加上编码参数,比如你的文件的编码是utf-8编码,则命令如下,java-jaryuicompressor-x.y.z.jarmyfile.js-omyfile-min.j

    2022年7月18日
    12
  • 【尚硅谷】JavaScript基础&实战丨JS入门到精通_01-06

    【尚硅谷】JavaScript基础&实战丨JS入门到精通_01-061.JavaScript–ECMAScript–DOM–BOM2.JS基础JS代码需要编写到<scripttype=”text/javascript”> console.log(“HelloWorld”);</script>

    2022年10月23日
    1
  • 【摄像头】图像传感器尺寸、像素大小和成像质量的关系

    【摄像头】图像传感器尺寸、像素大小和成像质量的关系1、图像传感器的尺寸(靶面大小)越大,成像质量越好如果相同分辨率的相机,传感器面积越大,则其单位像素的面积也越大,成像质量也会越好。同样的500万像素的摄像头,2/3”的传感器成像质量就要优于1/2”的。2、图像传感器的尺寸单位换算图像传感器的尺寸大小是指靶面对角线的长度,单位为英寸,1英寸等于16mm。这样1/2”传感器对角线长度则为8mm,按照一般的传感器的长宽比为4:3的话,那么就对应勾股定理,1/2”的传感器长宽分辨率为6.4mm、4.8mm。如某相机的分辨率为25881940的500万像素

    2022年6月10日
    68
  • Eclipse安装Activiti教程

    Eclipse安装Activiti教程方式一:在线安装(坑,一般都安装不成功),可以直接看方式二1.点击eclipse上方工具栏的Help,选择InstallNewSoftware2、弹出如下窗口,然后填写插件名称和安装地址Name:ActivitiBPMN2.0designerLocation:http://activiti.org/designer/update/然后便是不停的next和finish了,组图如下点击Next点击Next点击Next点击Finish3、安

    2022年7月21日
    11
  • (强烈推荐!!!)数据结构与算法学习[通俗易懂]

    (强烈推荐!!!)数据结构与算法学习[通俗易懂]基本算法贪心算法:贪心算法&nbsp;作者:独酌逸醉贪心算法:贪心算法精讲&nbsp;作者:3522021224递归和分治:递归与分治策略&nbsp;作者:zhoudaxia图论图的遍历(DFS和BFS):图的遍历&nbsp;作者:jefferent最小生成树(…

    2022年6月19日
    30
  • 前端,什么是跨域,及跨域常见的解决方案(简讲)「建议收藏」

    前端,什么是跨域,及跨域常见的解决方案(简讲)「建议收藏」认识跨域解决跨域

    2022年5月18日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号