16,554
社区成员
发帖
与我相关
我的任务
分享
Public Class Main
Const WM_KEYDOWN = 256
Const WM_KEYUP = 257
Public Const VK_NEXT = &H22
Dim p As New System.Diagnostics.Process
Dim bln_已加载 As Boolean
<DllImport("User32.dll ", EntryPoint:="SetParent")>
Private Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
End Function
<DllImport("user32.dll ", EntryPoint:="ShowWindow")>
Public Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer
End Function
Private Declare Auto Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Sub sbtn_裁入_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sbtn_裁入大智慧.Click
Dim inst As Process
Dim myProcess() As Process
myProcess = System.Diagnostics.Process.GetProcessesByName("wps")
If myProcess.Count = 0 Then
MsgBox("请先运行程序!", MsgBoxStyle.Information, "请注意")
Exit Sub
End If
For Each inst In myProcess
'If inst.Handle.ToInt32 = myExcel.Hinstance Then
p = System.Diagnostics.Process.GetProcessById(inst.Id)
System.Threading.Thread.Sleep(100)
SetParent(p.MainWindowHandle, pnl_11.Handle)
ShowWindow(p.MainWindowHandle, 3)
'End If
bln_已加载 = True
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If bln_已加载 = True Then
SendMessage(p.Handle, WM_KEYDOWN, VK_NEXT, 0)
' System.Threading.Thread.Sleep(500)
SendMessage(p.Handle, WM_KEYUP, VK_NEXT, 0)
End If
End Sub
End Class
PostMessage(handle, WM_KEYDOWN, Keys.Space, MapVirtualKey(Keys.Space, WM_KEYDOWN))
MapVirtualKey是API,声明一下都用integer就可以了。
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
Public Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
附带一段调用代码你参考一下
Public Sub SendPaintMessage(ByVal handle As IntPtr)
SendMessage(handle, WM_PAINT, IntPtr.Zero, IntPtr.Zero)
End Sub
Public Sub SendMouseClick(ByVal handle As IntPtr, ByVal x As Integer, ByVal y As Integer)
If handle <> IntPtr.Zero Then
Dim lParam As IntPtr = New IntPtr((y << 16) Or x)
Dim wParam As IntPtr = IntPtr.Zero
SendMessage(handle, WM_LBUTTONDOWN, wParam, lParam)
Threading.Thread.Sleep(100)
My.Application.DoEvents()
SendMessage(handle, WM_LBUTTONUP, wParam, lParam)
End If
End Sub
Public Sub SpaceKeyDown(ByVal handle As IntPtr)
If handle <> IntPtr.Zero Then SendMessage(handle, WM_KEYDOWN, Keys.Space, IntPtr.Zero)
End Sub
Public Sub SpaceKeyUp(ByVal handle As IntPtr)
If handle <> IntPtr.Zero Then SendMessage(handle, WM_KeyUP, Keys.Space, IntPtr.Zero)
End Sub
Public Sub SendEnter(ByVal handle As IntPtr)
If handle <> IntPtr.Zero Then
SendMessage(handle, WM_KEYDOWN, Keys.Enter, IntPtr.Zero)
Threading.Thread.Sleep(10)
My.Application.DoEvents()
SendMessage(handle, WM_KeyUP, Keys.Enter, IntPtr.Zero)
End If
End Sub