Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

AHK-Programm beenden - ohne Fenster, nur TrayIcon

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe!
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jochen



Anmeldedatum: 30.01.2008
Beiträge: 114

BeitragVerfasst am: Di Jul 01, 2008 11:21 am    Titel: AHK-Programm beenden - ohne Fenster, nur TrayIcon Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Zer00



Anmeldedatum: 01.06.2006
Beiträge: 126

BeitragVerfasst am: Di Jul 01, 2008 12:41 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jochen



Anmeldedatum: 30.01.2008
Beiträge: 114

BeitragVerfasst am: Di Jul 01, 2008 4:31 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Zer00



Anmeldedatum: 01.06.2006
Beiträge: 126

BeitragVerfasst am: Di Jul 01, 2008 5:02 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jochen



Anmeldedatum: 30.01.2008
Beiträge: 114

BeitragVerfasst am: Di Jul 01, 2008 5:24 pm    Titel: Antworten mit Zitat

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... Wink

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
Benutzer-Profile anzeigen Private Nachricht senden
BoBo²
Gast





BeitragVerfasst am: Di Jul 01, 2008 5:48 pm    Titel: Antworten mit Zitat

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

BeitragVerfasst am: Mi Jul 02, 2008 6:20 am    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jochen



Anmeldedatum: 30.01.2008
Beiträge: 114

BeitragVerfasst am: Mi Jul 02, 2008 6:43 am    Titel: Antworten mit Zitat

Hi Zer00,

Das ist wirklich nett von Dir!! Smile
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
Benutzer-Profile anzeigen Private Nachricht senden
Zer00



Anmeldedatum: 01.06.2006
Beiträge: 126

BeitragVerfasst am: Mi Jul 02, 2008 6:49 am    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DerRaphael



Anmeldedatum: 09.01.2008
Beiträge: 842
Wohnort: Zuhause

BeitragVerfasst am: Mi Jul 02, 2008 12:15 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe! Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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