vb 给其他程序的文本框发送字符 似乎是sendmassege
答案:3 悬赏:80 手机版
解决时间 2021-03-16 13:04
- 提问者网友:我没有何以琛的痴心不悔
- 2021-03-16 08:41
rt用sendkeys的可以走了……会的先说下,俺追问告你详细的事宜qqq=3q
最佳答案
- 五星知识达人网友:不如潦草
- 2021-03-16 09:22
比如下面的代码: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是直接返回结果的
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是直接返回结果的
全部回答
- 1楼网友:行路难
- 2021-03-16 10:53
'纠正下,是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
- 2楼网友:舊物识亽
- 2021-03-16 10:18
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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯