下你所需,载你所想!
汇集开发技术源码资料

游戏专用后台驱动级模拟按键脚本源码

:3.36KB :1 :2019-12-21 07:32:03

部分简介

Scancode = MapVirtualKey (虚拟键, 0) ' 获取虚拟键码
输出调试文本 (“扫描码:” + 到文本 (Scancode))
Scancodebyte = 取文本右边 (“00” + 取十六进制文本 (Scancode), 2) ' 将虚拟键码转换为十六进制
调试输出 (“十六进制扫描码:” + 到文本 (Scancodebyte))
s = Firstbyte + Scancodebyte + “0001” ' 按键状态(Firstbyte)+按键虚拟码(Scancodebyte)+扩展信息(0001)
调试输出 (“返回结果:” + 十六进制到十进制 (s))
返回 (十六进制到十进制 (s)) ' 十六到十

PostMessage (到数值 (编辑框_句柄.内容), 256, 到数值 (编辑框_按键.内容), 到数值 (MakeKeyLparam (到数值 (编辑框_按键.内容), 256)))

基于windows 消息机制的鼠标键盘模拟

我们怎样才能用Delphi来写一个程序,用来代替人们按键的方法呢?那就让我们来先了解一下windows中响应键盘事件的机制。

当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。

用户按下键盘上的一个键 >>>>> 键盘控制器就把这个键的扫描码传给计算机,然后交给键盘驱动程序 >>>>> 键盘驱动程序会把这个扫描码转换为键盘虚拟码(VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41)传给操作系统 >>>>> 操操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队 >>>>> 键盘消息被发送到当前活动窗口
应用程序级模拟(只针对某个程序,我称之为局部模拟)

windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和PostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消息是不需要返回值的,不然目标程序会没反应),切记切记!

PostMessage函数的delphi声明如下:

PostMessage(

hWnd: HWND; {目标程序上某个控件的句柄}

Msg: UINT; {消息的类型}

wParam: WPARAM; {32位指定附加的消息特定的信息}

lParam: LPARAM {32位指定附加的消息特定的信息}

): BOOL;

参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数Msg 是消息的类型,表示你要发送什么样的消息,最后wParam 和lParam这两个参数是随消息附加的数据,具体内容要由消息决定。

 

游戏专用后台驱动级模拟按键脚本源码

热门推荐

相关文章