在vb 中怎么样用 keybd_event 模拟一字符串输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vb 中怎么样用 keybd_event 模拟一字符串输入相关的知识,希望对你有一定的参考价值。

我想用 keybd_event 向一个程序的文本框中输入一字符串(比如:“djskdi65^&$edYFSKsas125,.-9w”)

我现在我只知道用 Mid 把串的字符一一的截取出,现用API函数 VkKeyScan 取得各个字符的虚拟码和Shift键的状态 ,VkKeyScan 返回
长整型的值,低字包含了虚拟键码。高字则包含了下述标志:
位0指出 Shift 键已经按下;位1指出 Ctrl 键已经按下;位2指出 Alt 键已经按下 ,但是我不知道怎么样把这个长整型的值分割出得高位所指的标志和低位所指的虚拟码

请高手帮我用VB言语编写!

谢谢!!

'这个需要用PostMessage,不能用keybd_event。
'看看这两个函数的声明就明白了。
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'因为PostMessage声明中有句柄参数hwnd,而keybd_event声明中没有句柄参数。
'所以PostMessage可以指向键盘消息发送对象的句柄hwnd,而keybd_event只能模拟按哪个键盘,不能把键盘消息发送到指定的对象,如文本框。
'"源码可以参考http://blog.csdn.net/wq1282/archive/2009/12/09/4972776.aspx"'
参考技术A 既然你能得到那个长整型的数,也会用mid函数,那你唯一的问题就是如何将那个长整型的数转换成二进制了.
我给你写一个十进制转二进制的函数吧.
Private Function doit(a As Long)
Dim s As String
if a>0 then
Do While a > 1
s = a Mod 2 & s
a = a \ 2
Loop
doit = "1" & s
else
msgbox "只能转换大于0的数"
end if

End Function
这个函数的作用是将参数a从十进制转成二进制.
你可以用mid函数取得任意一位上面的数了.当然,你要结合字条串函数len才能活用.len("agbc")返回的结果就是字符串"agbc"的长度,这里就是4.本回答被提问者和网友采纳

以上是关于在vb 中怎么样用 keybd_event 模拟一字符串输入的主要内容,如果未能解决你的问题,请参考以下文章

VB用API模拟截屏键PrintScreen

请用Python如何模拟键盘操作

vb net sendkeys 模拟按下ALT+Tab无效

VB使用keybd_event

delphi中如何模拟最简单的键盘输入?

vb后台模拟鼠标点击网页