externes Programm beenden?

Specialguest@home

Erfahrenes Mitglied
Hallo

Ich möchte gerne in meinem Programm ein anderes externes Programm beenden und nach einer bestimmten Zeit wieder starten!
Hat jemand ein Ansatz wie ich das machen kann?

thx sven
 
Beenden: Finde das Hauptfenster des Programms mit FindWindow() und schick ihm ein WM_CLOSE (mit PostMessage()).

Starten: CreateProcess oder ShellExecute? Eventuell kannst du dir sogar ein Handle oder so was geben lassen, mit dem du das Programm später schliessen kannst.
 
danke
Das habe ich schon soweit hinbekommen!
Code:
CWnd *pWnd;
if (pWnd = CWnd::FindWindow(L"ActiveSync",NULL) )
{
	pWnd->PostMessage(WM_CLOSE, NULL, NULL);
}
else
{
	AfxMessageBox(L"nixda");	
}
klappt auch!
Das erneute starten mach ich so ( ! Vorsicht ! eVC für PocketPC , aber ähnlich VC6.0)
Code:
SHELLEXECUTEINFO info;
info.cbSize = sizeof(info);
info.fMask = SEE_MASK_FLAG_NO_UI;
info.hwnd = NULL;
info.lpVerb = _T("open");
info.lpFile = _T("\\Windows\\ActiveConnect.exe");
info.lpParameters= _T("");
info.lpDirectory = _T("");
info.nShow = SW_SHOW;
info.hInstApp = AfxGetInstanceHandle();
ShellExecuteEx(&info);
Das gewüschte Programm wird auch gestartet (ActiveSync), leider bekommt es durch den manuellen start einen falschen parameter und kann nicht richtig starten!
Weiß jemand wie ich mir von laufenden Progs einen Parameter holen kann, diesen speichern und beim späteren Aufruf wieder mit übergeben kann?
:mad:

thx sven
 
Das gewüschte Programm wird auch gestartet (ActiveSync), leider bekommt es durch den manuellen start einen falschen parameter und kann nicht richtig starten!
Wie genau wirkt sich das aus? Müssen Parameter übergeben werden oder wie oder was?

Da du lpFile angibst, setze für lpParameters NULL ein. Kann allerdings auch sein, dass ich es falsch verstehe. MSDN:
lpParameters
Address of a null-terminated string that contains the application parameters. The parameters must be separated by spaces. If the lpFile member specifies a document file, lpParameters should be NULL.
Ausserdem solltest du vermutlich entweder den Pfad lpFile absolut machen (Laufwerksbuchstabe usw.). Angabe des Arbeitsverzeichnis (lpDirectory) könnte auch nützlich sein.
 
Wie genau wirkt sich das aus? Müssen Parameter übergeben werden oder wie oder was?
AS wird automatisch beim Einstecken des PPC in die Ladestation gestartet!
(Über USB) sobald ich das Programm mit PostMessage(..) schließe ist das Programm weg und kann auch erst wieder wenn der PPC im Cradle ist gestarten werden! Wenn ich das Prog manuell starte denkt der PPC das es sich um eine manuellen Verbindungsaufbau über Bluetooth oder IrDA handeln muss und setzt demensprechend in den Einstellungen von AS dieses ein! Ich kann auch erst wieder mit dem PPC verbinden wenn ich diese Einstellung manuell zurück auf 'USB setze! :-(

Ausserdem solltest du vermutlich entweder den Pfad lpFile absolut machen (Laufwerksbuchstabe usw.).
Leider gibt es unter PPC keine realativen Pfadangaben! Und auch keine Laufwerksbezeihnungen daher ist dies schon die absolute Pfadangabe! ;-)

trotzdem danke für deine Hilfe! Das mit info.lpParameters= NULL; hat leider auch nix gebracht!
Ich denke mir das ich das Programm nicht komplett schließen sollte, sondern einfach nur "disablen" sollte! Aber wie sag ich einem Prozeß das er nicht aktiv sein soll! Könnte man da nicht so ne "Art" sleep()(mit aufwachfunktion) auf dem Programm setzen ?

sven
 
Zurück