Supportnet / Forum / Anwendungen(Java,C++...)
Neues Problem mit VB
Frage
Hi!
Folgendes Problem:
Mein Programm hat ein anderes Programm gestartet. Nun soll mein Programm merken, wann das gestartete Programm wieder beendet wurde.
Wenn das nicht geht, dann soll es zumindest merken wann es selber wieder benutzt wird. Versteht ihr?
Danke!
Gruß
Bernie
Antwort 1 von Casvil
Du kannst doch bei deinem Prog einen Code ausgeben
In c++ in etwa
Sowas müsste auch mit deinem Prog gehen. Das Return 0 gibt dem BS den Fehlercode 0 zurück, somit weiss das BS dass dein Prog Fehlerfrei beendet wurde. Die Fehlerroutinen geben dann mit Return einen anderen Fehler aus, und so kann man dem User zeigen, ob er etwas Falsch gemacht hat, oder man zeigt ihm wo genau der Fehler lag.
Jedenfalls müsste es damit auch gehen, dass dein Proggie dieses Return abfängt. Ich hab leider keine VB erfahrung, hoffe aber es hilft.
©as
In c++ in etwa
int main() // deine Hauptfunktion
{
return 0;
}
Sowas müsste auch mit deinem Prog gehen. Das Return 0 gibt dem BS den Fehlercode 0 zurück, somit weiss das BS dass dein Prog Fehlerfrei beendet wurde. Die Fehlerroutinen geben dann mit Return einen anderen Fehler aus, und so kann man dem User zeigen, ob er etwas Falsch gemacht hat, oder man zeigt ihm wo genau der Fehler lag.
Jedenfalls müsste es damit auch gehen, dass dein Proggie dieses Return abfängt. Ich hab leider keine VB erfahrung, hoffe aber es hilft.
©as
Antwort 2 von Bernie
Ich verstehe leider nicht was das mit meinem Problem zu tun hat.
Hilfe!!!
Hilfe!!!
Antwort 3 von Casvil
War nur so eine idee. Jedes Proggie ist in der Regel so aufgebaut, dass es am Ende dem BS ne info gibt, was genau passiert ist, also Fehler etc. wie oben beschrieben. Es müsste doch gehen, dass du dann eine Ausstiegsroutine schreibst, die entweder diesen Stream abfängt/ausliest, damit dein Prog weiss dass das andere beendet wurde. Oder kannst du nicht eine Fkt. im 2 Proggie schreiben, welche dem ersten sagt, das es sich beendet, und dieses dann auch tut?!
©as
©as
Antwort 4 von Bernie
Ja stimmt. Aber damit klappt es auch nicht. Hat noch jemand eine Idee?
Gruß Bernie
Gruß Bernie
Antwort 5 von Nessus
Hi,
wenn Du ein externes (!) Programm über eine Routine im VB gestartet hast, läuft das als eigenständiger Task. Du müsstest dann in Intervalllen überprüfen, ob der Task noch läuft, wenn nicht soll eine Aktion ausgeführt werden.
Nessus
wenn Du ein externes (!) Programm über eine Routine im VB gestartet hast, läuft das als eigenständiger Task. Du müsstest dann in Intervalllen überprüfen, ob der Task noch läuft, wenn nicht soll eine Aktion ausgeführt werden.
Nessus
Antwort 6 von Alf
Es gibt eine Möglichkeit mit der Windows API herauszufinden, wann ein Programm beendet wurde. Es ist ähnlich kompliziert wie herauszufinden ob der Task noch läuft, aber weniger rechenintensiv. Wenn du an dem Code interessiert bist, schick ne PM.
Die obere ist sicherlich die eleganteste Lösung, es gibt aber auch noch andere.
Wenn du das 2. (zu startende) Programm auch selbst programmiert hast, kannst du...
...versuchen, es in das 1. zu integrieren. Als neues Formular, Modul, was auch immer.
...eine Datei erstellen oder einen Registrywert setzen. Das andere Programm überprüft dies in regelmäßigen Zeitabständen und reagiert dementsprechend.
Außerdem kannst du zum Beispiel die Form_Activate() oder Form_GotFocus() Methode benutzen, um herauszufinden, wann das Programm aktiviert wurde.
Das wars.
Die obere ist sicherlich die eleganteste Lösung, es gibt aber auch noch andere.
Wenn du das 2. (zu startende) Programm auch selbst programmiert hast, kannst du...
...versuchen, es in das 1. zu integrieren. Als neues Formular, Modul, was auch immer.
...eine Datei erstellen oder einen Registrywert setzen. Das andere Programm überprüft dies in regelmäßigen Zeitabständen und reagiert dementsprechend.
Außerdem kannst du zum Beispiel die Form_Activate() oder Form_GotFocus() Methode benutzen, um herauszufinden, wann das Programm aktiviert wurde.
Das wars.
Antwort 7 von Bernie
Hi!
Also das Programm, was gestartet werden soll, habe ich nicht selber programmiert. Ich starte es mit folgendem Code:
Private Sub Programm(sFilename As String)
Dim sDirectory As String
Dim lRet As Long
Dim DeskWin As Long
DeskWin = GetDesktopWindow()
lRet = ShellExecute(DeskWin, "open", sFilename, _
vbNullString, vbNullString, vbNormalFocus)
Gruß
Bernie
Also das Programm, was gestartet werden soll, habe ich nicht selber programmiert. Ich starte es mit folgendem Code:
Private Sub Programm(sFilename As String)
Dim sDirectory As String
Dim lRet As Long
Dim DeskWin As Long
DeskWin = GetDesktopWindow()
lRet = ShellExecute(DeskWin, "open", sFilename, _
vbNullString, vbNullString, vbNormalFocus)
Gruß
Bernie
Antwort 8 von Alf
Private Sub startExternApp(s_appFileName As String)
Dim l_handle As Long
Dim t_processInfo As PROCESS_INFORMATION
Dim t_startupInfo As STARTUPINFO
Dim l_success As Long
t_startupInfo.cb = Len(t_startupInfo)
l_success = CreateProcess(0&, s_appFileName, 0&, 0&, 1&, &H20, 0&, 0&, t_startupInfo, t_processInfo)
If l_success = 0 Then
l_handle = t_processInfo.hProcess
MsgBox "Extern application could not be opened."
Else
Do Until WaitForSingleObject(l_handle, 0)
DoEvents
Loop
MsgBox "Programm wurde beendet"
'// add code, what should happen, if extern application
'// is closed
End If
End Sub
So funktionierts.
Antwort 9 von Bernie
Klappt leider nicht. Beim Aufruf von:
Dim t_processInfo As PROCESS_INFORMATION
Dim t_startupInfo As STARTUPINFO
erfolgt gleich ein Fehler.
Ist aber nicht schlimm. Ich habe das Problem jetzt auch anders gelöst.
Vielen Dank
Gruß Bernie
Dim t_processInfo As PROCESS_INFORMATION
Dim t_startupInfo As STARTUPINFO
erfolgt gleich ein Fehler.
Ist aber nicht schlimm. Ich habe das Problem jetzt auch anders gelöst.
Vielen Dank
Gruß Bernie

