首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB如何模拟键盘/鼠标的按下啊

2012-03-05 
BCB怎么模拟键盘/鼠标的按下啊?我想模拟键盘的按下动作,比如按下F1/A/数字1等……但是我使用WM_KEYDOWN/WM_K

BCB怎么模拟键盘/鼠标的按下啊?
我想模拟键盘的按下动作,比如按下F1/A/数字1等……
但是我使用WM_KEYDOWN/WM_KEYUP/WM_CHAR/ "A "/ "1 "/0x32/32/0x72等……都没有成功。。。那个hwd句柄是没有问题的,我可以正确的读出程序内存数据。。
各位帮帮忙啊,我该怎么办?

SendMessage(hwd,WM_KEYDOWN,0x32,0);
SendMessage(hwd,WM_KEYUP,0x32,0);


[解决办法]
VOID keybd_event(BYTE bVk,
BYTE bScan,
DWORD dwFlags,
PTR dwExtraInfo
);
可满足你的要求
第一个参数是虚拟键盘码
鼠标的虚拟键盘码如下,键盘的可查表
VK_LBUTTON (01)
Left mouse button

VK_RBUTTON (02)
Right mouse button

VK_CANCEL (03)
Control-break processing

VK_MBUTTON (04)
Middle mouse button (three-button mouse)

VK_XBUTTON1 (05)
Windows 2000/XP: X1 mouse button

VK_XBUTTON2 (06)
Windows 2000/XP: X2 mouse button

例子(锁定数字键盘)
#include <windows.h>

void SetNumLock( BOOL bState )
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);
if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
(!bState && (keyState[VK_NUMLOCK] & 1)) )
{
// Simulate a key press
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );

// Simulate a key release
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}

void main()
{
SetNumLock( TRUE );
}

[解决办法]
UINT iScan=MapVirtualKey(VK_F3,0); // 得到扫描码
keybd_event(VK_F3,iScan,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_F3,iScan,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);

另外还可以用SendInput,mouse_event等等函数

[解决办法]
注意看。你写的是
keybd_event(32, 0, 0 ,0);

正确的应该是
int keyA=32;
keybd_event(keyA, MapVirtualKey(keyA,0), 0 ,0);
上面的是模拟按下键,然后应该模拟弹起键,用
keybd_event(keyA, MapVirtualKey(keyA,0),KEYEVENTF_KEYUP ,0);
我曾经用就种方法完成了一个游戏按键精灵,最复杂的是按指定路线巡游,不是一般的难,是很难!

热点排行