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

键盘 计算机代码,键盘钩子示例[通俗易懂]#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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 运行时错误‘-2147467259(80004005)操作必须使用一个可更新的查询[通俗易懂]

    运行时错误‘-2147467259(80004005)操作必须使用一个可更新的查询[通俗易懂]运行时错误‘-2147467259(80004005)操作必须使用一个可更新的查询昨天晚上一个网友发给我一个酒店客房管理系统,让我帮他看看是什么问题源码拿来一看是网上下载的,数据库是access。

  • axios的post请求参数格式

    axios的post请求参数格式axios的post请求参数格式默认格式Content-Type:application/json;charset=UTF-8 axios({method:’post’,url:”,data:{ param1:”, param2:” }}}).the…

  • Element.clientWidth属性

    Element.clientWidth属性内联元素以及没有CSS样式的元素的clientWidth属性值为0。Element.clientWidth属性表示元素的内部宽度,以像素计。该属性包括内边距padding,但不包括边框border、外边距margin和垂直滚动条(如果有的话)。intElemClientWidth是一个整数,表示元素的clientWidth。clientWidth是一个只读属性。…

  • 2.5.1大礼包

    2.5.1大礼包查找:全局搜索 prefs:root=或者 openURL:不要有“prefs:root=xxxx”这个可能出在自己项目中,特别是接手老项目,另一种可能是第三方sdk里出现的特别是调用相册相机调用wifi这类的第三方框架或SDK。如果第三方出现重新下载最新的包或者换第三方,联系第三方sdk开发者修改。修改一般只弹框提示不做跳转或者用苹果提供的方法。不要出现:@"pre…

  • Java设计模式之行为型:策略模式

    Java设计模式之行为型:策略模式

  • kafka 集群搭建步骤

    kafka 集群搭建步骤  kafka集群的运行建立在zookeeper基础上,kafka中的消息偏移量信息、kafka集群信息、topic等信息会被存储在zookeeper中。高版本的kafka自带了zookeeper,本文使用独立的zookeeper集群部署kafka集群。前期准备见《Linux环境下,搭建ZooKeeper集群》。一、下载kafka  kafka官网:http://kafka.apache.org/http://kafka.apache.org/downloa

发表回复

您的电子邮箱地址不会被公开。

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