Hallo Zusammen.
ich versuche gerade, aus meiner Software eine andere Software zu steuern.
Ich möchte:
- das Programm starten
- den Datei-Öffnen Dialog aufrufen (geht über STRG+O oder über Menü->Datei->Öffnen)
- in dem Eingabefenster vom Öffnen Dialog einen Pfad eingeben
- "Enter" drücken
- das Programm schließen.
Ich hab es geschafft, diese Prozedur mit SendKeys umzusetzen. Jedoch hört man ja immer wieder von Problemen mit SendKeys und deswegen möchte ich eigentlich lieber mit SendMessage arbeiten.
Mein Code für SendMessage schaut bisher so aus:
lRes ist aber bei jeder Anfrage 0
Und es passiert nicht so wirklich was...
Das externe Programm wird gestartet und nachher auch wieder geschlossen. Aber dazwischen passiert nix.
Ich bin für jede Hilfe dankbar!
Gruß!
ich versuche gerade, aus meiner Software eine andere Software zu steuern.
Ich möchte:
- das Programm starten
- den Datei-Öffnen Dialog aufrufen (geht über STRG+O oder über Menü->Datei->Öffnen)
- in dem Eingabefenster vom Öffnen Dialog einen Pfad eingeben
- "Enter" drücken
- das Programm schließen.
Ich hab es geschafft, diese Prozedur mit SendKeys umzusetzen. Jedoch hört man ja immer wieder von Problemen mit SendKeys und deswegen möchte ich eigentlich lieber mit SendMessage arbeiten.
Mein Code für SendMessage schaut bisher so aus:
PHP:
Private Const WM_SETTEXT As Int32 = &HC
Private Const WM_CLOSE As Int32 = &H10
Private Const VK_LMENU As Int32 = &HA4
Private Const WM_KEYDOWN As Int32 = &H100
Private Const WM_KEYUP As Int32 = &H101
Private Const GW_HWNDNEXT As Int32 = 2&
Private Const VK_CONTROL As Int32 = &H11
Private Const VK_O As Int32 = &H4F
Private Const WM_SETFOCUS As Int32 = &H7
Private Const WM_ACTIVATEAPP As Int32 = &H1C
Private Const WM_NOTIFY As Int32 = &H4E
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Integer, ByVal lpdwProcessId As Integer) As Integer
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Integer, ByVal wCmd As Integer) As Integer
Public Function genSendMessage(ByVal Application As String, ByVal path As String) As Boolean
Dim proc As System.Diagnostics.Process
Dim pList() As Process
Dim appID As Integer
Dim hWnd As Integer
Dim hWndAct As Integer
Dim lRes As Integer
Try
hWndAct = FindWindow(vbNullString, "meinProgramm")
pList = Process.GetProcessesByName("externesProgramm")
For Each proc In pList
proc.Kill()
Next
appID = Shell(Application, AppWinStyle.NormalNoFocus)
hWnd = FindWindow(vbNullString, "externesProgramm")
lRes = SendMessage(hWnd, WM_SETFOCUS, 0, 0)
lRes = SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0)
lRes = SendMessage(hWnd, WM_KEYDOWN, VK_O, 0)
lRes = SendMessage(hWnd, WM_KEYUP, VK_O, 0)
lRes = SendMessage(hWnd, WM_KEYUP, VK_CONTROL, 0)
Catch
End Try
End Function
lRes ist aber bei jeder Anfrage 0
Und es passiert nicht so wirklich was...
Das externe Programm wird gestartet und nachher auch wieder geschlossen. Aber dazwischen passiert nix.
Ich bin für jede Hilfe dankbar!
Gruß!