7,763
社区成员
发帖
与我相关
我的任务
分享
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_PASTE = &H302
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
Dim TemphWnd As Long
TemphWnd = FindWindow("Notepad", vbNullString)
TemphWnd = FindWindowEx(TemphWnd, 0, "Edit", vbNullString)
If TemphWnd Then
''-- 将Text1中的文本粘贴到记事本
'VB.Clipboard.SetText Text1.Text
'SendMessage TemphWnd, WM_PASTE, 0, ByVal 0&
'把记事本的内容设置为Text1中的文本
SendMessage TemphWnd, WM_SETTEXT, 0, ByVal CStr(Text1.Text)
End If
End Sub
Public Declare Function GetCaretPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function GetFocus Lib "user32" () As Long
Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Function CaretPos() As POINTAPI
Dim ptr As Long
ptr = GetForegroundWindow()
Dim p As POINTAPI
Dim targetThreadID, localThreadID As Long
'得到Caret在屏幕上的位置
If ptr <> 0 Then
targetThreadID = GetWindowThreadProcessId(ptr, 0)
localThreadID = GetCurrentThreadId()
If localThreadID <> targetThreadID Then
Call AttachThreadInput(localThreadID, targetThreadID, 1)
ptr = GetFocus()
If (ptr <> 0) Then
Call GetCaretPos(p)
Call ClientToScreen(ptr, p)
End If
Call AttachThreadInput(localThreadID, targetThreadID, 0)
End If
End If
CaretPos = p
End Function
Private Sub MSComm1_OnComm()
Dim Pos As POINTAPI
Dim hResult As Long
Dim hwnd As Long
Dim Str As String
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
'获得当前光标位置
Pos = CaretPos
'获得光标对应窗口的句柄
hwnd = WindowFromPoint(Pos.x, Pos.y)
Str = MSComm1.Input
'当激活窗口不是监控程序所处的窗口时,输出串口输入
If hwnd <> Me.hwnd Then
For i = 1 To Len(Str)
SendMessage hwnd, WM_IME_CHAR, Asc(Mid(Str, i, 1)), 1
Next
End If
MSComm1.PortOpen = False
End Select