亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在VB中怎么用keybd_event函數模擬按下并彈起F1 ?

在VB中怎么用keybd_event函數模擬按下并彈起F1 ?

白豬掌柜的 2019-02-12 14:11:09
在VB中怎么用keybd_event函數模擬按下并彈起F1 ?
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

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



查看完整回答
反對 回復 2019-03-18
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

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鍵了。



查看完整回答
反對 回復 2019-03-18
  • 2 回答
  • 0 關注
  • 1834 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號