 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Jochen
Anmeldedatum: 30.01.2008 Beiträge: 114
|
Verfasst am: Di Jul 01, 2008 11:21 am Titel: AHK-Programm beenden - ohne Fenster, nur TrayIcon |
|
|
Ich habe ein paar ahk.exe Skripts, die mit einem TrayIcon verankert laufen.
Nun möchte ich aber ein Skript automatisiert aus dem Autostart-Ordner löschen. Dazu muß es natürlich erst beendet werden.
Dazu habe ich mir folgendes Skript gebastelt, aber es funktioniert nicht:
| Code: |
IfExist %A_Startup%\TRAYPROGRAMM.exe
{
Process, Close, TRAYPROGRAMM.exe
Process, WaitClose, TRAYPROGRAMM.exe
FileDelete %A_Startup%\TRAYPROGRAMM.exe
}
|
Da ja kein Fenster vorliegt, kann ich es auch nicht über WinClose beenden.
Habe ich was übersehen oder habt ihr eine andere Idee?[/code] _________________ Jochen |
|
| Nach oben |
|
 |
Zer00
Anmeldedatum: 01.06.2006 Beiträge: 126
|
Verfasst am: Di Jul 01, 2008 12:41 pm Titel: |
|
|
Ich glaube nicht, das AHK bei jedem Prozess die Berechtigung hat um ihn zu beenden.
Mir fallen auf Anhieb zwei Lösungsansätze zu diesem Problem ein:
1. Kannst Du es über die Kommandozeile versuchen.
2. Versuche es mit einer Sprache die Systemnäher ist.
z. B. C# hier der Code dafür:
| Code: | System.Diagnostics.Process[] = System.Diagnostics.Process.GetProcessesByName("MEIN_PROZESS");
close[0].CloseMainWindow();
close[0].close(); |
Das funktioniert bei mir gut. Sollte es nicht klappen, versuche die "harte" Variante indem Du '.kill' nimmst und nicht '.close'. _________________ o
L_
O L
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat. |
|
| Nach oben |
|
 |
Jochen
Anmeldedatum: 30.01.2008 Beiträge: 114
|
Verfasst am: Di Jul 01, 2008 4:31 pm Titel: |
|
|
Hi Zer00,
Danke für die Antwort. Wenn ich Dich recht verstehe, müßte ich in C# programmieren und dann mit dem entsprechenden Compiler kompilieren - richtig?
Ich habe allerdings noch nie damit gearbeitet; sicher gibt´s auch da ein Forum, bloß müßte ich dann eigentlich alles umstellen, wenn ich konsistent arbeiten will.
Vielleicht hast Du noch ein paar Tips in der Richtung?
Vorerst habe ich mir wie folgt geholfen:
| Code: |
IfExist %A_Startup%\MEINPROGRAMM.EXE
{
Process, Close, MEINPROGRAMM.EXE
Process, WaitClose, MEINPROGRAMM.EXE
Sleep, 500
FileMove %A_Startup%\MEINPROGRAMM.EXE, %A_Temp%
;
MsgBox, 4, Rechner neu starten, Ihr Computer muß nun neu gestartet werden, damit die Änderungen wirksam werden.`n`n Soll der Rechner jetzt neu gestartet werden?
IfMsgBox YES
Shutdown, 2
;
IfMsgBo NO
MsgBox, 48, Die Änderungen sind noch nicht wirksam! Sie werden erst beim nächsten Neustart Ihres Rechners aktiviert.
|
In wie weit Process, close überhaupt einen Einfluß hat, weiß ich nicht, da das TrayIcon nach wie vor aktiv ist und auch mit STRG ALT ENTF das Programm weiterhin aufgeführt wird,
Interessant ist aber, daß trotz
Process, WaitClose, MEINPROGRAMM.EXE
dann die nächste Zeile ausgeführt wird!
D.h., das Programm wird in den TEMP-Ordner verschoben und damit beim nächsten Start nicht mehr geladen, da es sich nicht mehr im Autostart-Ordner befindet. _________________ Jochen |
|
| Nach oben |
|
 |
Zer00
Anmeldedatum: 01.06.2006 Beiträge: 126
|
Verfasst am: Di Jul 01, 2008 5:02 pm Titel: |
|
|
| Zitat: | Interessant ist aber, daß trotz
Process, WaitClose, MEINPROGRAMM.EXE
dann die nächste Zeile ausgeführt wird! |
So wie ich das sehe, klingt das sehr logisch. Das Fenster ist nicht mehr aktiv (es gibt ja keins), von daher geht es weiter.
Du musst den Prozess beenden (zur Not 'killen') und nicht das (nicht vorhandene) Fenster schließen.
Process, WaitClose bezieht sich (glaub ich) auf das Main-Window. Ich bin mir nicht sicher ob AHK die nötige 'Macht' hat um einen Prozess zu killen. Daher hatte ich eine andere Sprache vorgeschlagen.
Hast du es schonmal mit dem Lösungsansatz Nummer 1 versucht?
| Code: | | RunWait, %comspec% /c taskkill /IM Dein_programm.exe |
Wenn das nicht hilft, und das Fenster welches Du schließen willst nur 'versteckt' ist, versuche doch nochmal die 'DetectHiddenWindows, ON' Funkiton. _________________ o
L_
O L
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat. |
|
| Nach oben |
|
 |
Jochen
Anmeldedatum: 30.01.2008 Beiträge: 114
|
Verfasst am: Di Jul 01, 2008 5:24 pm Titel: |
|
|
Ah, ich hatte eigentlich gedacht, daß Process, Close eine Anwendung beendet, unabhängig davon, ob ein Fenster exestiert oder nicht!
Aber wenn es fensterabhängig arbeitet, wie du meinst, würde auch die Fortführung des Skripts wieder Sinn machen - Schade eigentlich...
Deine beiden Vorschläge habe ich ausprobiert - leider ohne Erfolg.
Weder
RunWait, %comspec% /c taskkill /IM MeineÁnwendung.exe
noch das vorstellen von
DetectHiddenWindows, ON
hat zum Erfolg geführt (auch nicht bei meinem ursprünglichen Skript).
Scheint also nur der von mir gewählte Umweg zu funktionieren - nicht sehr elegant, aber naja.
Aber schau mer mal - Noch ist der Tag nicht vorüber, es sind ja in NRW schon Ferien, da wird vielleicht noch der ein oder andere eine Idee haben... _________________ Jochen |
|
| Nach oben |
|
 |
BoBo² Gast
|
Verfasst am: Di Jul 01, 2008 5:48 pm Titel: |
|
|
| Wenn ich mich recht erinnere, gibt es eine OS-Einstellung, welche anbietet nach einem Reboot 'verwaiste' Installationsdateien zu entfernen. Google ist auch dein Freund. |
|
| Nach oben |
|
 |
Zer00
Anmeldedatum: 01.06.2006 Beiträge: 126
|
Verfasst am: Mi Jul 02, 2008 6:20 am Titel: |
|
|
Wenn BoBos Idee keine Abhilfe schafft, kann ich Dir nur anbieten, dass wir das mit C# mal testen. Du nennst mir den Namen des Prozesses und ich schicke Dir ein Programm, welches den Prozess beendet.
Das Programm könntest Du dann von AHK ausführen lassen.
Für diesen Test benötigst Du allerdings das .NET-Framework 2.0. _________________ o
L_
O L
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat. |
|
| Nach oben |
|
 |
Jochen
Anmeldedatum: 30.01.2008 Beiträge: 114
|
Verfasst am: Mi Jul 02, 2008 6:43 am Titel: |
|
|
Hi Zer00,
Das ist wirklich nett von Dir!!
Aber da ich die Programme auch von Zeit zu Zeit umbenenne, werden ich auf AHK-Basis weiterarbeiten, solange das Tool einigermaßen das hergibt, was ich brauche.
Bobos Einstellung habe ich zwar noch nicht gefunden, aber schau mer mal...
Nochmals vielen Dank für Dein freundliches Angebot! _________________ Jochen |
|
| Nach oben |
|
 |
Zer00
Anmeldedatum: 01.06.2006 Beiträge: 126
|
Verfasst am: Mi Jul 02, 2008 6:49 am Titel: |
|
|
Gut, sag bescheid wenn Du keine andere Lösung mehr weist. _________________ o
L_
O L
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat. |
|
| Nach oben |
|
 |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 842 Wohnort: Zuhause
|
Verfasst am: Mi Jul 02, 2008 12:15 pm Titel: |
|
|
hallo jochen,
wenn du ein ahkscript als exe laufen lässt ohne GUI und das beenden möchtest, mach das so:
TESTSCRIPT als EXE
| Code: | ::test::
msgbox test
return |
diese wenigen zeilen habe ich kompiliert und anschließend gestartet.
Danach führte ich folgendes Script aus:
| Code: | DetectHiddenWindows,On
SetTitleMatchMode,2
Liste := PIDs := ShortNames := ""
WinGet, hwnd, List, ahk_class AutoHotkey
Loop, %hwnd%
{
ID := hwnd%A_Index%
WinGetTitle, Titel, ahk_id %ID%
SkriptPath := RegExReplace(Titel, " - AutoHotkey v" A_AhkVersion )
SplitPath,SkriptPath,KurzName
WinGet, PID, PID, %SkriptPath% ahk_class AutoHotkey
PIDs .= PID "`n"
PID2s .= PID " " Titel "`n"
}
SetTimer,UpTT,150
SetTimer,TTOFF,7500
InputBox,tPID,ZielPID eingeben,Bitte gib die Nummer des Programms an`, das Du beenden möchtest.,,,,,,,10000
if Strlen(tPID+0)=0
ExitApp
WinClose,ahk_pid %tPID%
SetTimer,UpTT,150
return
upTT:
Tooltip % PID2s
return
TToff:
Tooltip
return |
ich habe aus dem tooltip (,der nach 7.5 Sekunden wieder verschwindet) mir meine kompilierte Exe gesucht, ihre PID in die Editbox eingegeben (die nach 10 sekunden verschwindet) und mein Zielprogramm wurd geschlossen.
eigentlich ganz einfach. der trick liegt zum darin, wie man das skript findet, nämlich via detecthiddenwindows, on und über seine klasse ahk_class autohotkey. das killerscript lässt sich erst die hWnds ausgeben, um diese nach PID aufzulösen.
grüße
derRaphael _________________
|
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|