tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
3733
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    crimac crimac ist offline Grünschnabel
    Registriert seit
    May 2008
    Beiträge
    2
    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:
    PHP-Code:
        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 IntegerByVal wMsg As IntegerByVal wParam As IntegerByVal iParam As Integer) As Integer
        
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As StringByVal lpWindowName As String) As Integer
        
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As IntegerByVal lpdwProcessId As Integer) As Integer
        
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As IntegerByVal wCmd As Integer) As Integer
       


        
    Public Function genSendMessage(ByVal Application As StringByVal 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(ApplicationAppWinStyle.NormalNoFocus)
                
    hWnd FindWindow(vbNullString"externesProgramm")


                
    lRes SendMessage(hWndWM_SETFOCUS00)
                
    lRes SendMessage(hWndWM_KEYDOWNVK_CONTROL0)
                
    lRes SendMessage(hWndWM_KEYDOWNVK_O0)
                
    lRes SendMessage(hWndWM_KEYUPVK_O0)
                
    lRes SendMessage(hWndWM_KEYUPVK_CONTROL0)
                

            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ß!
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    der dritte Parameter (iParam) passt noch nicht. So sollte es funktionieren:
    Code :
    1
    2
    3
    4
    
    lRes = SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 1) 
    lRes = SendMessage(hWnd, WM_KEYDOWN, VK_O, 1) 
    lRes = SendMessage(hWnd, WM_KEYUP, VK_O, &HC0000001) 
    lRes = SendMessage(hWnd, WM_KEYUP, VK_CONTROL, &HC0000001)
    Der Rückgabewert von "0" ist ok und bedeutet, dass die Message verarbeitet wurde.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    crimac crimac ist offline Grünschnabel
    Registriert seit
    May 2008
    Beiträge
    2
    ich danke schonmal auf jeden Fall.
    Werde aber morgen erst dazu kommen, das auszuprobieren.
    Melde mich dann wegen Erfolg oder Miserfolg
    Gruß!
     

Ähnliche Themen

  1. [WINAPI] sendmessage & findwindow "problem"
    Von SkyRaVeR im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 22.10.10, 08:17
  2. Auswahl mit "Strg + RGB-Kanal" was passiert da genau?
    Von Fourseasons im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 27.06.09, 16:10
  3. "Strg + Leerzeichen" mit KeyListener abfragen
    Von Esra im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 06.06.07, 15:05
  4. In VB6 "Strg+Alt+Entf" sperren?
    Von AleX im Forum Visual Basic 6.0
    Antworten: 18
    Letzter Beitrag: 25.04.05, 00:33
  5. Antworten: 2
    Letzter Beitrag: 22.12.03, 14:44