hi
ich bin absolut neu in autoit und habe nicht besonders viel erfahrung damit. es geht um folgendes. wenn ich mein autoit programm starte dann führt es 2 programme aus. außerdem habe ich einen eintrag im traymenü des autoit icons erstellt. das problem ist das wenn alles abgearbeitet ist und die programme gestartet wurden das autoit programm natürlich beendet wird
aber wie kann ich das verhindern? ich will das wenn ich den eintrag im tray menü anklicke die 2 gestarteten programme beendet werden und anschließend das autoit programm. aber dahin komme ich ja gar nicht.
ich würde mich über hilfe freuen
danke
autoit soll sich nicht automatisch beenden
-
- [ gelöst ]
-
autoit_newbie -
17. Oktober 2008 um 16:45 -
Geschlossen -
Erledigt
-
-
wenn du uns den script zeigst können wir helfen
-
also bis jetzt sieht es erst so aus. es fehlt noch einiges.
[autoit]opt("trayoneventmode","1")
[/autoit][autoit][/autoit][autoit]$close=traycreateitem("Beenden");
[/autoit][autoit][/autoit][autoit]
trayitemsetonevent($close,"beenden");if fileexists("running") then
[/autoit][autoit][/autoit][autoit]
msgbox("0","Fehler","Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
else
fileopen("running","1")
endiffunc beenden()
[/autoit]
msgbox("0","Test","Test")
endfunc -
Spoiler anzeigen
[autoit]opt("trayoneventmode","1")
[/autoit] [autoit][/autoit] [autoit]$close=traycreateitem("Beenden");
[/autoit] [autoit][/autoit] [autoit]
trayitemsetonevent($close,"beenden");if fileexists("running") then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
msgbox("0","Fehler","Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
else
fileopen("running","1")
endifWhile 1
[/autoit] [autoit][/autoit] [autoit]
sleep(10)
WEndfunc beenden()
[/autoit]
msgbox("0","Test","Test")
endfunc -
ok also es hält jetzt an. allerdings passiert nichts wenn ich auf die tray fläche "Beenden" klicke. es sollte jetzt testweise eine messagebox öffnen aber er macht nix
danke -
- Offizieller Beitrag
Probier es mal so :
Spoiler anzeigen
[autoit]opt("trayoneventmode","1")
[/autoit] [autoit][/autoit] [autoit]
Opt("TrayMenuMode",1)
$close=traycreateitem("Beenden");
trayitemsetonevent($close,"beenden");
if fileexists("running") then
msgbox("0","Fehler","Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
else
fileopen("running","1")
endifWhile 1
[/autoit]
sleep(10)
WEnd
func beenden()
msgbox("0","Test","Test")
endfuncMfG Raupi
-
hey das klappt. ich danke dir
gibt es eigentlich auch die möglichkeit direkt die vorhandene exit schaltfläche zu nutzen und darüber den code zum beenden der programme ausführen lassen, oder sind die beiden schaltflächen (Script Paused und Exit) unveränderlich? -
Hallo und herzlich Willkommen hier.
Natürlich muß die Funktion "Running" auch vorhanden sein.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Opt("trayoneventmode", "1")$close = TrayCreateItem("Beenden");
[/autoit] [autoit][/autoit] [autoit]
TrayItemSetOnEvent($close, "beenden");If FileExists("running") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox("0", "Fehler", "Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
Else
FileOpen("running", "1") ;aufruf d. Func
EndIfWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc beenden()
[/autoit] [autoit][/autoit] [autoit]
MsgBox("0", "Test", "Test")
EndFunc ;==>beendenFunc running() ;die Func
[/autoit]
MsgBox("0", "running-Test", "running")
EndFunc ;==>running
Viel Erfolg ! -
- Offizieller Beitrag
Hallo und herzlich Willkommen hier.
Natürlich muß die Funktion "Running" auch vorhanden sein.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Opt("trayoneventmode", "1")$close = TrayCreateItem("Beenden");
[/autoit] [autoit][/autoit] [autoit]
TrayItemSetOnEvent($close, "beenden");If FileExists("running") Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox("0", "Fehler", "Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
Else
FileOpen("running", "1") ;aufruf d. Func
EndIfWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc beenden()
[/autoit] [autoit][/autoit] [autoit]
MsgBox("0", "Test", "Test")
EndFunc ;==>beendenFunc running() ;die Func
[/autoit]
MsgBox("0", "running-Test", "running")
EndFunc ;==>running
Viel Erfolg !
Damit wird aber der Befehl von beenden nicht mehr ausgeführt .MfG Raupi
-
hm das muss ich kurz erklären. "running" ist eine datei ohne endung die erstellt wird wenn das programm gestartet wird. wenn jemand jetzt eine zweite instanz starten will und das programm sieht das die datei running vorhanden ist, dann beendet es sich mit einer fehlermeldung
man könnte das natürlich eleganter lösen indem man abfragt ob der prozess schon existiert, aber da das ganze auch über netzlaufwerke funktionieren soll, muss es so gehen. somit kann das programm erkennen, das eine instanz des programmes auf einem anderen rechner ausgeführt wird -
- Offizieller Beitrag
Der Code :
[autoit]If FileExists("running") Then
[/autoit]
MsgBox("0", "Fehler", "Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
Else
FileOpen("running", "1") ;aufruf d. Func
EndIfPrüft höchstens ob ein File existiert und nicht ob des File gerade ausgeführt wird .
MfG Raupi
Edit : War schneller als du des Erklärt hast .
-
macht ja nix
-
Danke Dir, ich habe es als Funktion erkannt haben wollen. Mein Ding
-
- Offizieller Beitrag
Ich weiß zwar jetzt net genau wieso , aber wenn das Standard Tray menu aktiviert ist funzen die neuen Befehle nicht . Jedenfalls bei mir net .
[autoit]
Also :Opt("TrayMenuMode",1);1 = kein Standard Menü
[/autoit]
MfG Raupi -
ja bei mir hat es ja auch erst funktioniert wo ich das standard menü abgeschaltet habe dank deiner information. das einzige was nicht funktioniert ist das er die running datei nicht löscht wenn ich beende. verstehe ich aber nicht so wirklich hier mal der aktuelle code
[autoit]func beenden() ;processclose("httpd.exe")
[/autoit][autoit][/autoit][autoit]
;processclose("mysqld-nt.exe")
filedelete("running")
exit
endfuncfunc beenden_2()
[/autoit][autoit][/autoit][autoit]
exit
endfuncopt("traymenumode",1)
[/autoit][autoit][/autoit][autoit]
opt("trayoneventmode",1)$beenden=traycreateitem("Beenden")
[/autoit][autoit][/autoit][autoit]if fileexists("running") then
[/autoit][autoit][/autoit][autoit]
trayitemsetonevent($beenden,"beenden_2")
msgbox(0,"Fehler","Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
else
trayitemsetonevent($beenden,"beenden")
fileopen("running",1)
;run("server\apache\bin\httpd.exe","server\apache\bin")
;run("server\mysql\bin\mysqld-nt.exe","server\mysql\bin")
endifwhile 1
[/autoit]
sleep(1)
wend -
- Offizieller Beitrag
Ich würde FileDelete und FileExist mit einem vollständigen Pfad aufrufen .
Füge die Functionen an das Ende des Scriptes .MfG Raupi
-
hm naja wenn ich keinen pfad angebe nimmt er ja den aktuellen ordner wo sich das programm befindet. bei fileexists und fileopen usw funktioniert das auch prima aber bei filedelete komischerweise nicht. aber ich kann es mal probieren mit dem kompletten pfad
edit: funktioniert auch mit kompletten pfaden nicht. vielleicht hat das programm nicht die berechtigung was zu löschen -
- Offizieller Beitrag
Versuch des mal so :
[autoit]filedelete(@ScriptDir&"\running")
[/autoit]
fileopen(@ScriptDir&"\running",1)
if fileexists(@ScriptDir&"\running") thenMfG Raupi
-
- Offizieller Beitrag
Dein Script funzt mit FileDelete bei mir auch net . Ich habe mal das probiert und dann funzt es .
[autoit]FileRecycle(@ScriptDir&"\running")
[/autoit]
[autoit]
Alternativ funzt das :FileDelete(@ScriptDir&"\running.*")
[/autoit]Irgendwie interpretiert Autoit es ohne die .* erweiterung falsch
Du kannst dir ja mal die Makroreverenz in der Hilfe reinziehen ... ist sehr interessant .
MfG Raupi -
bei mir geht es mit filerecycle leider auch nicht
[autoit]
hier mal der aktuelle code. kannst es ja mal so bei dir probieren. danke das du mir hilfstfunc beenden()
[/autoit][autoit][/autoit][autoit]
;processclose("httpd.exe")
;processclose("mysqld-nt.exe")
filerecycle(@scriptdir&"\running")
exit
endfunc;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit][autoit][/autoit][autoit]if fileexists("running") then
[/autoit]
msgbox(0,"Fehler","Das Programm wird bereits ausgeführt. Mehrere Instanzen sind nicht möglich.")
else
opt("traymenumode",1)
opt("trayoneventmode",1)
trayitemsetonevent(traycreateitem("Beenden"),"beenden")
fileopen("running",1)
;run("server\apache\bin\httpd.exe","server\apache\bin")
;run("server\mysql\bin\mysqld-nt.exe","server\mysql\bin")
while 1
sleep(1)
wend
endif -