Public Const WM_CHAR = &H102 Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '将一个字符串通过PostMessage传送出去 Public Sub subPostString(ByVal lngHandle As Long, 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 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 = PostMessage(lngHandle, WM_CHAR, lngAsc, 0) Next intP ' Call subDelay(10) ' lngP = PostMessage(lngActiveWindow, WM_LBUTTONDOWN, MK_LBUTTON, 0) Exit Sub errSub:End Sub
VB无法直接控制消息循环,需要一种称之为SubClass(子类化)的技法。思路就是通过SetWindowLong修改窗口函数,然后挂钩自己的消息处理程序去处理自己的消息。具体 google VB 子类化 setwindowlong
不好意思,看错了,你用的是VB.NET。那就简单了。重写窗体的 WndProc 虚函数就可以了。
这些参数的值的是在变化的,我用全局变量,但效果不好,去处理的时候,STRING值已经发生了改变
Public Const WM_CHAR = &H102
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'将一个字符串通过PostMessage传送出去
Public Sub subPostString(ByVal lngHandle As Long, 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
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 = PostMessage(lngHandle, WM_CHAR, lngAsc, 0)
Next intP
' Call subDelay(10)
' lngP = PostMessage(lngActiveWindow, WM_LBUTTONDOWN, MK_LBUTTON, 0)
Exit Sub
errSub:End Sub