在VB中怎么用keybd_event函数模拟按下并弹起F1 ?

如题..这个问题应该不难吧..100分的悬赏分当然并不是让你来随便说两句话就能拿的``还希望各位能给出具体的实例和程序说明。。谢谢``如果能让我满意的还可以追加分另外补充... 如题..这个问题应该不难吧..100分的悬赏分当然并不是让你来随便说两句话就能拿的`` 还希望各位能给出具体的实例和程序说明。。谢谢``如果能让我满意的还可以追加分
另外补充个问题`` 除了keybd_event函数和sendmessage之外还有别的方法模拟吗?
1楼和2楼的回答己经解决了我一半的问题``我的要求是模拟按下并弹起F1`` 要怎么做才能做到呢?
展开
 我来答
kefanmail
2007-07-09 · TA获得超过690个赞
知道小有建树答主
回答量:419
采纳率:0%
帮助的人:391万
展开全部
keybd_event(112, 0, 0, 0) '模拟按下"F1"键
Sleep 200 '延时200毫秒
keybd_event(112, 0, KEYEVENTF_KEYUP, 0) '模拟弹起F1键
----------------------------------------------------------------------------------------

模拟键盘或鼠标的响应

我们一般使用:

UINT SendInput(
UINT nInputs, // count of input events
�PINPUT pInputs, // array of input events
int cbSize // size of structure
);

API函数。第一个参数是说明第二个参数的矩阵的维数的,第二个参数包含了响应事件,这个自己填充就可以,最后

是这个结构的大小,非常简单,这是最简单的方法模拟键盘鼠标了,呵呵。注意,这个函数还有个替代函数:

VOID keybd_event(
BYTE bVk, // 虚拟键码
BYTE bScan, // 扫描码
DWORD dwFlags,
ULONG_PTR dwExtraInfo // 附加键状态
);



VOID mouse_event(
DWORD dwFlags, // motion and click options
DWORD dx, // horizontal position or change
DWORD dy, // vertical position or change
DWORD dwData, // wheel movement
ULONG_PTR dwExtraInfo // application-defined information
);

这两个函数非常简单了,我想那些按键精灵就是用的这个吧。上面的是模拟键盘,下面的是模拟鼠标的。这个仅仅是

模拟部分,要和游戏联系起来我们还需要找到游戏的窗口才行,或者包含快捷键,就象按键精灵的那个激活键一样,我们

可以用GetWindow函数来枚举窗口,也可以用Findwindow函数来查找制定的窗口(注意,还有一个FindWindowEx),

FindwindowEx可以找到窗口的子窗口,比如按钮,等什么东西。当游戏切换场景的时候我们可以用FindWindowEx来确定一

些当前窗口的特征,从而判断是否还在这个场景,方法很多了,比如可以GetWindowInfo来确定一些东西,比如当查找不

到某个按钮的时候就说明游戏场景已经切换了,等等办法。有的游戏没有控件在里面,这是对图像做坐标变换的话,这种

方法就要受到限制了。这就需要我们用别的办法来辅助分析了。

附:常用模拟键的键值对照表。

键盘键与虚拟键码对照表

字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
A 65 0 96 F1 112 Backspace 8
B 66 1 97 F2 113 Tab 9
C 67 2 98 F3 114 Clear 12
D 68 3 99 F4 115 Enter 13
E 69 4 100 F5 116 Shift 16
F 70 5 101 F6 117 Control 17
G 71 6 102 F7 118 Alt 18
H 72 7 103 F8 119 Caps Lock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10 121 Spacebar 32
K 75 * 106 F11 122 Page Up 33
L 76 + 107 F12 123 Page Down 34
M 77 Enter 108 -- -- End 35
N 78 - 109 -- -- Home 36
O 79 . 110 -- -- Left Arrow 37
P 80 / 111 -- -- Up Arrow 38
Q 81 -- -- -- -- Right Arrow 39
R 82 -- -- -- -- Down Arrow 40
S 83 -- -- -- -- Insert 45
T 84 -- -- -- -- Delete 46
U 85 -- -- -- -- Help 47
V 86 -- -- -- -- Num Lock 144
W 87
X 88
Y 89
Z 90
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
飘渺世间天
2007-07-09 · TA获得超过2650个赞
知道大有可为答主
回答量:843
采纳率:0%
帮助的人:1105万
展开全部
Public Class Form1

Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As ULong, _
ByVal dwExtraInfo As ULong)

Const KEYEVENTF_KEYUP = &H2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Focus()
keybd_event(Keys.B, 0, 0, 0)
keybd_event(Keys.B, 0, KEYEVENTF_KEYUP, 0)
End Sub

End Class

只要把keys.B改成keys.f1就可以了,

keybd_event(Keys.f1, 0, 0, 0) '这是键按下
keybd_event(Keys.f1, 0, KEYEVENTF_KEYUP, 0) '这是弹起

因为我用一个textbox来显示按键结果,按f1的话可能没效果所以我就改用B键了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式