2016-04-22 8 views
2

So habe ich vor kurzem in meiner VB6-Programmierung stecken, wo ich versucht, das Formular wieder erscheinen, nachdem es beim Ausführen einer * .exe-Anwendung ausgeblendet wurde.Führen Sie eine * .exe-Anwendung über das Formular, dann zeigen Sie das Formular erneut beim App beenden

Dieses Formular hat nur eine Schaltfläche, die eine * .exe öffnen würde, und beim Klicken auf die Schaltfläche wird das betreffende Programm geöffnet und das Formular ausgeblendet. Sobald das betreffende Programm geschlossen ist, sollte das Formular wieder erscheinen, obwohl es in meinem Zustand nicht ist. Im Folgenden ist der Code für die Schaltfläche selbst:

Private Sub btnClicky_Click() 
Dim Res 
Dim Filename 
Filename = "C:\Windows\notepad.exe" 
    Res = Shell(Filename, vbHide) 

If IsProcessRunning("Notepad.exe") Then 
    Me.Hide 
Else 
    Me.Show 
End If 
End Sub 

Sobald es funktioniert, würde ich den Code für die Zuordnung implementieren ich arbeite, wie ich zur Zeit in einem Büro Praktikum Programm bin und ich hatte eine Benutzeroberfläche Programm zu erstellen Dazu gehört die Verknüpfung mehrerer Anwendungen. Ihre Hilfe wird geschätzt.

Vielen Dank im Voraus!

Antwort

4

Eine bessere Möglichkeit, wäre die Anwendung zu schälen, verstecken Sie Ihre App & warten auf den Prozess zu beenden:

Private Const SYNCHRONIZE = &H100000 
Private Const WAIT_INFINITE = -1& 
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long 
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long 
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 

Private Sub btnClicky_Click() 
    Dim hProcess As Long 

    hProcess = OpenProcess(SYNCHRONIZE, True, Shell("notepad.exe", vbNormalFocus)) 

    Me.Hide 

    Call WaitForSingleObject(hProcess, WAIT_INFINITE) 
    Call CloseHandle(hProcess) 

    Me.Show 
    Me.SetFocus 
End Sub 
+0

Genau das, was ich brauche! Vielen Dank! :) –

1

Ihr Code nur dann ausgeführt wird, wenn die Schaltfläche geklickt wird, schlage ich vor, dass Sie einen Timer in Ihrem Formular einfügen und im Falle von „Timer1_Timer“, wenn Sie Maust tun Sie Test:

Private Sub Timer1_Timer() 
If IsProcessRunning("Notepad.exe") Then 
    Me.Hide 
Else 
    Me.Show 
End If 
End Sub