PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm abschießen und nach Beendigung wieder starten


PatTheMav
2005-05-27, 19:31:34
Nachdem ich nun endlich herausgefunden hab, daß meine Worms World Party-Probleme ihren Ursprung darin haben, daß sich WWP nicht mit ObjectDock vertragen, wollt ich mir einen Launcher bauen, der ObjectDock korrekt beendet (mit dem eigenen CleanUP, also kein direktes killen), Worms startet und nach der Beendigung von Worms wieder ObjectDock startet.

Nun hab ich bisher nur aktiv in C, C++ und Java programmiert, allerdings wurde von den Profs geflissentlich nur Algorithmen-Spielerei betrieben, wirklich aktive Anwendungsprogrammierung innerhalb von Windows wurde nicht betrieben. Daher hab ich bissle Tomaten auf den Augen, welche APIs da mein Freund sind.

Desweiteren hatte ich gehofft, daß der WSH sowas evtl. erlaubt, das Shell-Object bietet da ja einige Möglichkeiten, aber extern ein Programm beenden scheint ein ungewöhnlicher Akt zu sein.

Hätte da jemand Rat für mich ?

Elladan
2005-05-31, 17:49:48
Ich weiß nicht, ob es das ist, was du suchst:

Ist leider Delphi.
http://www.dsdt.info/tipps/?id=175
Wie man ein Programm starten kann, steht dort auch noch irgendwo...

Von:
www.delphi-sourdce.de bzw. http://www.dsdt.info/tipps/

Sephiroth
2005-05-31, 18:00:30
Ich weiß nicht, ob es das ist, was du suchst:

Ist leider Delphi.
http://www.dsdt.info/tipps/?id=175
Wie man ein Programm starten kann, steht dort auch noch irgendwo...

Von:
www.delphi-sourdce.de bzw. http://www.dsdt.info/tipps/
Wenn ich mich nicht irre, bekommt genau das (Taskkill) auch einfach mit WSH hin. Das Delphi Progrämmchen dort killt ja auch nur den Prozeß - das kann auch WSH.

The Terminate method attempts to end a process using the WM_CLOSE message. If that does not work, it kills the process immediately without going through the normal shutdown procedure.


Pat, wie beendet man denn ObjectDock richtig?

PatTheMav
2005-06-01, 00:23:18
Wenn ich mich nicht irre, bekommt genau das (Taskkill) auch einfach mit WSH hin. Das Delphi Progrämmchen dort killt ja auch nur den Prozeß - das kann auch WSH.



Pat, wie beendet man denn ObjectDock richtig?Naja das beenden durch ein Signal, ich weiss ja nicht wie das unter Windows läuft, hab mit Prozessen bisher nur unter Unix zu tun gehabt, nur es gibt ja die Variante Signal an Programm senden, welches sich selbst korrekt beendet, oder das richtige killen, wo das OS den Prozeß einfach kaltmacht :)

Sephiroth
2005-06-01, 01:08:42
ich dachte da mehr an sowas wie, daß man eine extra exe starten muß oder sowas, weil du was von cleanup sagst (ich kenne objectdock nicht).

nun, ist da auch dieses DekstopX bei dir aktiv? Dann nämlich könntest du dir ein Objekt bauen, welches DesktopX beendet und dann kann z.B. eine Batchdatei gestartet werden, die mit "start /wait worms.exe" worms startet und danach wieder objectdock.

aber das sind halt alles nur so ein paar überlegungen ...

Xmas
2005-06-01, 11:48:40
Naja das beenden durch ein Signal, ich weiss ja nicht wie das unter Windows läuft, hab mit Prozessen bisher nur unter Unix zu tun gehabt, nur es gibt ja die Variante Signal an Programm senden, welches sich selbst korrekt beendet, oder das richtige killen, wo das OS den Prozeß einfach kaltmacht :)
Also WM_CLOSE ist schon genau die Window-Message die du hier brauchst, entspricht dem Klick aufs X oder Alt-F4. Du musst aber auch erstmal an das Windowhandle kommen, um eine Window-Message schicken zu können. Dafür gibts FindWindow.

Hab hier gerade mal was in irgendeinem arabischen Forum gefunden...
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10

Private Sub Timer1_Timer()
wnd = FindWindow(vbNullString, "Registry Editor")
PostMessage wnd, WM_CLOSE, 0&, 0&
End Sub

Sephiroth
2005-06-01, 12:36:38
das könnte man dann mit WSh auch so hier machen

am Beispiel von Excel:
strcomputer = "."
Set objwmiservice = GetObject("winmgmts:" & "{impersonationlevel=impersonate}!\\" & strcomputer & "\root\cimv2")
Set colprocesslist = objwmiservice.execquery ("SELECT * FROM Win32_Process WHERE Name = 'EXCEL.exe'")
For Each objprocess In colprocesslist
objprocess.terminate()
next

Dann noch worms startet und abwarten, bis das beendet ist und dann wieder objectdock starten.
Du müsstest es einfach mal Probieren Pat, ob das beenden von ObjectDock auf diese Weise klappt.