永发信息网

vb 给其他程序的文本框发送字符 似乎是sendmassege

答案:3  悬赏:80  手机版
解决时间 2021-03-16 13:04
rt用sendkeys的可以走了……会的先说下,俺追问告你详细的事宜qqq=3q
最佳答案
比如下面的代码:Private Sub Command1_Click()
Dim data() As Byte
Dim i, h1, h2 As Long
i = 0
data = StrConv("测试", vbFromUnicode)
h1 = FindWindow(vbNullString, "form1")
h2 = FindWindowEx(h1, 0, "ThunderTextBox", "")
While i <= UBound(data)
PostMessage h2, WM_CHAR, data(i), 0
DoEvents
i = i + 1
Wend
End Sub以上代码是给form1窗口的文本框发送“测试”两个字,注意要用postmessage函数,因为用sendmessage时要等待响应后才返回,所以很容易卡死,postmessage是直接返回结果的
全部回答
'纠正下,是PostMessagePrivate Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 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 Const WM_KEYDOWN = &H100 Const WM_KEYUP = &H101 Const WM_CHAR = &H102 Const VK_A = &H41 Const VK_CONTROL = &H11Private Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long Dim s As String Dim Firstbyte As String 'lparam参数的24-31位 If flag = WM_KEYDOWN Then '如果是按下键 Firstbyte = "00" Else Firstbyte = "C0" '如果是释放键 End If Dim Scancode As Long '获得键的扫描码 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码 Secondbyte = Right("00" & Hex(Scancode), ...'纠正下,是PostMessagePrivate Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 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 Const WM_KEYDOWN = &H100 Const WM_KEYUP = &H101 Const WM_CHAR = &H102 Const VK_A = &H41 Const VK_CONTROL = &H11Private Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long Dim s As String Dim Firstbyte As String 'lparam参数的24-31位 If flag = WM_KEYDOWN Then '如果是按下键 Firstbyte = "00" Else Firstbyte = "C0" '如果是释放键 End If Dim Scancode As Long '获得键的扫描码 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam参数的16-23位,即虚拟键扫描码 Secondbyte = Right("00" & Hex(Scancode), 2) s = Firstbyte & Secondbyte & "0001" '0001为lparam参数的0-15位,即发送次数和其它扩展信息 MakeKeyLparam = Val("&H" & s) End FunctionPrivate Sub Timer1_Timer() '示例: Call PostMessage(FindWindow(vbNullString, "Form123"), WM_KEYDOWN, VK_CONTROL, 0) Call PostMessage(FindWindow(vbNullString, "Form123"), WM_KEYUP, VK_CONTROL, 0) End Sub
private declare function postmessage lib "user32" alias "postmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) '将一个字符串通过postmessage传送出去 public sub subpoststring(ahwnd,byval strp as string) dim intp as integer dim intk as integer dim lngasc as long dim lngp as long dim strt as string on error goto errsub ' debug.print strp for intp = 0 to len(strp) - 1 strt = mid(strp, intp + 1, 1) if asc(strt) <= 0 then lngasc = ascw(strconv(strt, 128)) if lngasc < 0 then lngasc = lngasc + 65536 '2^16 end if else lngasc = asc(strt) end if lngp = sendmessage(ahwnd, wm_char, lngasc, 0) next intp exit sub errsub: end sub private sub command1_click() subpoststring (句柄 ,账号 ) end sub
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
重装WIN7系统如果不激活会有什么后果
鲁宁茗楼地址在哪,我要去那里办事
如何让canon 6d 外置闪光灯根据亮度自动闪光
win10系统安装错误怎么解决
焦作大富豪酒店
天宇通讯(百富路)我想知道这个在什么地方
佛朗戈手表是瑞土产的吗
为什么无密码被停用
怎样看一支股票资金的流入与流出
海口市美兰区宝鸿幼儿园地址有知道的么?有点
鬼釜神功和巧夺天工的区别?
春季感冒吃什么药
Y604/街口环城路(路口)地址在什么地方,想过
请我图片中的女人是谁
净水器在孝感哪里有卖的?多少钱?
推荐资讯
向日葵为什么向阳开?
地下停车场人行门出入口地址在哪,我要去那里
北京大学未名学堂地址有知道的么?有点事想过
红双喜经典1906多少钱
为什么在红米2a手机上打开百度后再退出就经常
新风格窗帘地址在什么地方,想过去办事
云雀鸟胸前的毛盖住翅膀怎么回事?
人类把人造天体送上太空必须具有第一宇宙速度
形容捣蛋的成语
对方第二次见面就想和你上床,该怎么办?
季发卤肉店我想知道这个在什么地方
日式中式棋盘哪种好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?