转自不用winio,直接达到驱动级模拟键盘效果的keybd_event函数用法

键盘模拟技术是在编写游戏外挂时经常使用的技术。但是由于很多游戏采用了directinput的方式,使得发送的一般键盘消息无法被程序收到。这时候需要使用驱动级的键盘模拟技术,直接发送键盘的硬件扫描码,达到模拟键盘的目的。

    目前网络上流行的做法是使用winio模拟键盘硬件扫描码,但是winio并不稳定,时常有严重错误发生。这里电王介绍一种稳定方便的方式——使用keybd_event函数,这种方法非常简单,而且极为稳定。

    参阅MSDN,我们可以发现以下介绍:

VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);

Parameters

bVk
Specifies a virtual-key code. The code must be a value in the range 1 to 254.
bScan
Specifies a hardware scan code for the key.
dwFlags
A set of flag bits that specify various aspects of function operation. An application can use any combination
of the following predefined constant values to set the flags.

Value Meaning
KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP If specified, the key is being released. If not specified, the key is being depressed.

dwExtraInfo
Specifies an additional 32-bit value associated with the key stroke.
 

其中第二个参数 BYTE bScan 其实就是键盘的硬件扫描码。很多资料上都简单的把这个参数设为0,而使用第一个参数设置键盘的虚拟值,浪费了这个函数的功能。在使用这个函数时,只要把一参的虚拟值和二参的扫描码值设为对应的一个按键(注意,如果只设置一参而把二参设为0,很多使用directinput的游戏是不能响应的),就可令目前几乎所有游戏成功响应。

keybd_event函数用法的更多相关文章

  1. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  2. memcpy函数用法

    memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...

  3. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  4. php中opendir函数用法实例

    这篇文章主要介绍了php中opendir函数用法,以实例形式详细讲述了opendir函数打开目录的用法及相关的注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例分析了php中opendi ...

  5. assert()函数用法总结

    assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> ...

  6. C语言中qsort函数用法

    C语言中qsort函数用法-示例分析    本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...

  7. OVER(PARTITION BY)函数用法

    OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...

  8. qsort函数用法【转】

    qsort函数用法 qsort 功 能: 使用快速排序例程进行排序  用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(con ...

  9. Perl Sort函数用法总结和使用实例

    一) sort函数用法 sort LISTsort BLOCK LISTsort SUBNAME LIST sort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNA ...

随机推荐

  1. android 开发过程中碰到的 Failed to create the part's controls 问题

    在开发android的过程中,遇到一个很奇怪的问题,出现了“ Failed to create the part's controls” 的错误,查询了N多资料,然后逐条删除代码测试, 后来发现是变量 ...

  2. C++ STL (备忘)

    2014-08-04 16:33:57 (1)  map  map定义形式 map<type1,type2> map_name; map的基本操作函数:      C++ Maps是一种关 ...

  3. 完全用LINUX工作

    http://blog.csdn.net/e6894853/article/details/7881091 下面列出我常用的一些 Linux 程序.一个列表里可能有很多,那是为了方便你来选择,我列出了 ...

  4. JavaScript平常会跳的坑系列(一)

    function Foo() { //定义foo函数 getName = function () { console.log('1');}; console.log(this); return thi ...

  5. js 如何创建一个对象

    有两种简单方法可以创建一个空对象: var obj = new Object(); 和: var obj = {}; 这两种方法在语义上是相同的.第二种更方便的方法叫作“对象字面量(object li ...

  6. 20160322 javaweb 学习笔记--response 重定向

    //一般方法 response.setStatus(302); response.setHeader("Location", "/20160314/index.jsp&q ...

  7. javascript Window对象 第16节

    <html> <head> <title>浏览器对象</title> <script type="text/javascript&quo ...

  8. 基于C语言EOF与getchar()的使用详解

    转自:http://www.jb51.net/article/36848.htm   大师级经典的著作,要字斟句酌的去读,去理解.以前在看K&R的The C Programming Langu ...

  9. 在Windows下用gSoap实现简单加法实例

    实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来. 1.在gSoap的官网上下载文件夹,本人的版本是 ...

  10. hrbust 1328 相等的最小公倍数(数论)

    Description 定义An为1,2,-,n的最小公倍数,例如,A1 = 1,A2 = 2,A3 = 6,A4 = 12,A5 = 60,A6 = 60. 请你判断对于给出的任意整数n,An是否等 ...