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
目的是找到指定軟體,然后把他放到自己的frm中,再給這個軟體發送訊息SendMessage,讓他翻頁。現在是軟體視窗找到了,也加到自己的視窗中了,就是發送訊息給這個視窗,他沒有反應,就是他不翻頁,SendMessage 的引數也找不全,各位看看錯在哪了。
uj5u.com熱心網友回復:
這個宣告……感覺有點問題哈另外確定vk_next翻頁嗎?記得這個家伙等于rbutton or space。。。
先改一下API試試吧:
<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
uj5u.com熱心網友回復:
另,最后一個引數:
PostMessage(handle, WM_KEYDOWN, Keys.Space, MapVirtualKey(Keys.Space, WM_KEYDOWN))
MapVirtualKey是API,宣告一下都用integer就可以了。
uj5u.com熱心網友回復:
謝謝,我看一下。
uj5u.com熱心網友回復:
還是翻不了, 是不是翻之前,需要將那個視窗設定為焦點?
uj5u.com熱心網友回復:
WPS用什么翻頁?你確定發送的按鍵對嗎?uj5u.com熱心網友回復:
我知道了,可能直接發給主表單SendMessage不行,是不是還要找到具體的子表單或者控制元件的句柄?
大佬 ,給我一個列舉子表單和控制元件的api 函式和實體,如果能有vb.net 的方法更好了。
uj5u.com熱心網友回復:
找到原因了,累死了,原來還要找到具體的控制元件才能發訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/58398.html
標籤:VB.NET
上一篇:求砸代碼
下一篇:CRM怎么讀取MT4的資料?
