发现:Hook住一个key的消息,用keybd_event模拟键盘 - mY aSp.ne...
来源:百度文库 编辑:神马文学网 时间:2024/06/30 19:19:15
发现:Hook住一个key的消息,用keybd_event模拟键盘
作者:jamesfay
我做过一个侍魂2 PC版的自动发招程序,大概的方法就是Hook住一个key的消息,然后用keybd_event模拟键盘的消息。我觉得sendMessage不一定有用,因为很多时候directX的程序是不看winMessage的,而是直接读设备。所以还是推荐用keybd_event。
http://www.codeproject.com/csharp/globalhook.asp 这个能帮你实现Hook
至于keybd_event很简单的。
比如这就是天霸封神斩的发招方法:
[DllImport("user32.dll", EntryPoint="keybd_event")]
public static extern void keybd_event (
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
private const int KEYEVENTF_EXTENDEDKEY = 0x1;
private const int KEYEVENTF_KEYUP = 0x2;
private const int KEYEVENTF_KEYDOWN = 0x00;
private const int KEY_A = 0x41;
private const int KEY_S = 0x53;
private const int KEY_D = 0x44;
private const int KEY_W = 0x57;
private const int KEY_J = 0x4A;
private const int KEY_K = 0x4B;
private const int KEY_L = 0x4C;
private const int KEY_U = 0x55;
private const int KEY_I = 0x49;
private const int KEY_O = 0x4F;
#region SimulateKey
private void OneKey(byte VirtualKey, int _interval, int KeyUpDown)
{
keybd_event(VirtualKey, 0, KeyUpDown, 0);
Thread.Sleep(_interval);
}
private void TowKey(byte VirtualKey1, byte VirtualKey2, int _interval, int KeyUpDown)
{
keybd_event(VirtualKey1, 0, KeyUpDown, 0);
keybd_event(VirtualKey2, 0, KeyUpDown, 0);
Thread.Sleep(_interval);
}
#endregion SimulateKey
#region Actions
private void ToRight_Action01(int Interval)
{
int _interval = Interval;
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYDOWN);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYUP);
}
private void ToLeft_Action01(int Interval)
{
int _interval = Interval;
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYDOWN);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYUP);
}
#endregion Actions
作者:jamesfay
我做过一个侍魂2 PC版的自动发招程序,大概的方法就是Hook住一个key的消息,然后用keybd_event模拟键盘的消息。我觉得sendMessage不一定有用,因为很多时候directX的程序是不看winMessage的,而是直接读设备。所以还是推荐用keybd_event。
http://www.codeproject.com/csharp/globalhook.asp 这个能帮你实现Hook
至于keybd_event很简单的。
比如这就是天霸封神斩的发招方法:
[DllImport("user32.dll", EntryPoint="keybd_event")]
public static extern void keybd_event (
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
private const int KEYEVENTF_EXTENDEDKEY = 0x1;
private const int KEYEVENTF_KEYUP = 0x2;
private const int KEYEVENTF_KEYDOWN = 0x00;
private const int KEY_A = 0x41;
private const int KEY_S = 0x53;
private const int KEY_D = 0x44;
private const int KEY_W = 0x57;
private const int KEY_J = 0x4A;
private const int KEY_K = 0x4B;
private const int KEY_L = 0x4C;
private const int KEY_U = 0x55;
private const int KEY_I = 0x49;
private const int KEY_O = 0x4F;
#region SimulateKey
private void OneKey(byte VirtualKey, int _interval, int KeyUpDown)
{
keybd_event(VirtualKey, 0, KeyUpDown, 0);
Thread.Sleep(_interval);
}
private void TowKey(byte VirtualKey1, byte VirtualKey2, int _interval, int KeyUpDown)
{
keybd_event(VirtualKey1, 0, KeyUpDown, 0);
keybd_event(VirtualKey2, 0, KeyUpDown, 0);
Thread.Sleep(_interval);
}
#endregion SimulateKey
#region Actions
private void ToRight_Action01(int Interval)
{
int _interval = Interval;
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYDOWN);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYUP);
}
private void ToLeft_Action01(int Interval)
{
int _interval = Interval;
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_A, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_S, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_D, _interval, KEYEVENTF_KEYDOWN);
OneKey(KEY_S, _interval, KEYEVENTF_KEYUP);
OneKey(KEY_D, _interval, KEYEVENTF_KEYUP);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYDOWN);
TowKey(KEY_K, KEY_U,_interval, KEYEVENTF_KEYUP);
}
#endregion Actions
发现:Hook住一个key的消息,用keybd_event模拟键盘 - mY aSp.ne...
用VB模拟键盘事件的N种方法
一个月内有消息的核心期刊
一个震惊世界的消息
用ASP实现一个真正的注册页面
打造一个“能说会道”的键盘
delphi 消息机制引入的一个副作用
delphi 消息机制引入的一个副作用
asp事务处理的另外一个方法
asp.net学习中发现的比较完整的流程
浅议VisualBasic.NET中HOOK的应用
HOOK(钩子)函数的详细说明
一个美国人对中美冲突的看法- 北美在线 / North America Online Ne...
一个伟大的发现
一个清洗电脑键盘的好方法
一个清洗键盘的好方法
一个清洗键盘的好方法
一个清洗键盘的好方法
鼠标键盘模拟控制器JoyToKey Ver4.1
捕获键盘任何输入消息 绿色版
关于卡巴斯基和Key(转载自一个把卡巴玩儿转了的朋友)
只要一个KEY,让你的卡巴用上20年(图解)?????
关于卡巴斯基和Key(转载自一个把卡巴玩儿转了的朋友)
一个建筑火灾模拟