Announcement

Collapse
No announcement yet.

externe Programm aktivieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • externe Programm aktivieren

    Hallo,

    ich sitz grad am Problem ein externes Programm aufzurufen, aktiv zu setzen und dann zu verarbeiten. Eigentlich soweit nicht schlimm.

    ABER: ich krieg das Programm nicht immer ins Bild, soll heißen wenn das Programm auf die Taskbar minimiert wird funktioniert das AppActivate nicht,
    das geht nur wenn es nur im Hintergrund ist.

    Hier erstmal ein wenig Code:
    Code:
     Public Sub New()
            Me.InitializeComponent()
        End Sub
        Private Function GetProcessID(ByVal hProcess As String, ByVal MachineName As String) _
    As String
            Try
                Dim ps As Diagnostics.Process() = _
                 Diagnostics.Process.GetProcessesByName(hProcess, MachineName)
                For Each Item As Diagnostics.Process In ps
                    Return Item.Id.ToString()
                    'Return Item.MainWindowHandle.ToString()
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString(), "Info")
            End Try
            Return String.Empty
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click
            Id = GetProcessID("DtmCtc", Environment.MachineName).ToString
            If (Not Id.ToString Is String.Empty) Then
                'MessageBox.Show(Id, "ProcessId")
            Else
                MsgBox("Programm nicht gefunden")
    
            End If
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button2.Click
    
            AppActivate(Id)
            System.Windows.Forms.SendKeys.SendWait("{F5}")
            System.Windows.Forms.SendKeys.Send("vbKeyMenu" + "vbKeySpace" + "vbKeyR")
    
        End Sub
    
    End Class
    Wie ihr seht hab ich es auch schon mit Sendkeys versucht, funktioniert nicht da es in der anwendung keine Funktion für ALT gibt.

    Nächster Ansatz wäre jetzt mit ALT+Tab solange durch zu scrollen bis ich die betreffende Prozess-Id erwischt habe.

    Wie geht das?
    Habt ihr evtl noch andere Vorschläge wie ich mit .Net das minimierte Programm bekomme?
    Zuletzt editiert von Undeathly_Shadow; 24.06.2010, 12:48. Reason: bessere lesbarkeit des Codes
    Ich hab keine Ahnung was ich tue aber ich will es lernen

  • #2
    Kenne jetzt keine Methode aus dem Framework die das gewünschte Verhalten hat. AppActivate macht auf jeden Fall (entsprechend der Doku) etwas anderes.

    SwitchToThisWindow aus der WinAPI scheint das zu sein was du suchst. Vorsicht die gilt als deprecated, kenne aber keinen einfachen Ersatz dafür.

    Comment


    • #3
      Nimm mal die Klasse

      http://johannes.www01.dc02.de/downlo...udio/Window.vb

      mit in dein Projekt. Damit kannst du fremde Fenster, wenn du den Handle hast, entminimieren ().

      Code:
      Dim p As Process
      Dim win As Window = Window.GetWindowByHandle(p.MainWindowHandle)
      win.SetAppWinStyle(AppWinStyle.NormalFocus)
      Also das dürfte Funktionieren. Guck dir auch nochmal die Klasse an da sind bestimmt noch andere Nützliche Funktionen drin.

      Comment


      • #4
        Danke erstmal an alle für die Hilfe.
        Da ich mich immer versuche um API´s zu drücken, versuch ich grad den Weg von [Nemo].
        mit was muss ich denn p füllen?
        kann ich da nicht irgendwie meine Prozessid reinlaufen lassen?
        Ich hab keine Ahnung was ich tue aber ich will es lernen

        Comment


        • #5
          Da ich mich immer versuche um API´s zu drücken, versuch ich grad den Weg von [Nemo].
          Ähm, der Code ist eine Anhäufung von Win API Funktionen. Du drückst dich als nicht vor den API's du holst dir noch mehr davon in deinen Code. Wovor du dich drückst ist es die API Funktionen zu verstehen und durch rein holen in deinen eigenen Sourcecode stehst du kurz davor deinen eigenen Code nicht mehr zu verstehen

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            Wovor du dich drückst ist es die API Funktionen zu verstehen und durch rein holen in deinen eigenen Sourcecode stehst du kurz davor deinen eigenen Code nicht mehr zu verstehen
            ich sehe du hast mein Problem wie immer gut erfasst *rofl*

            versuch wars wert
            Ich hab keine Ahnung was ich tue aber ich will es lernen

            Comment


            • #7
              Originally posted by Undeathly_Shadow View Post
              Danke erstmal an alle für die Hilfe.
              Da ich mich immer versuche um API´s zu drücken, versuch ich grad den Weg von [Nemo].
              mit was muss ich denn p füllen?
              kann ich da nicht irgendwie meine Prozessid reinlaufen lassen?
              Also p ist der Prozess von dem Programm dieser Anwendung

              Also wie bereits von Ralf gesagt (
              Ähm, der Code ist eine Anhäufung von Win API Funktionen
              ) ist meine Klasse nur ein Haufen API's in eine Komfortablere Form "gepackt". Wenn du trotzdem API's verwenden willst dann kannst du dir die Aufrufe aus meiner Klasse rauskopieren - Alles "Free4all"

              Comment

              Working...
              X