Vielleicht ist dieses Tastaturkürzel noch ganz nützlich:
Auskommentieren von markiertem Quelltext (auch über mehrere Zeilen):
Ctrl-q oder - auf dem Nummernblock
Liebe Grüße
merlinuwe
Vielleicht ist dieses Tastaturkürzel noch ganz nützlich:
Auskommentieren von markiertem Quelltext (auch über mehrere Zeilen):
Ctrl-q oder - auf dem Nummernblock
Liebe Grüße
merlinuwe
name22: DANKE, es läuft!
Habe das Programm ein wenig umgebaut, um es besser zu verstehen. Der Trick liegt anscheinend darin, dass Local Static $iInt = 32 bei jedem erneuten Aufruf der Funktion _AsciiCodeB() um 1 erhöht vorgefunden wird. Man, hat das gebraucht, bis ich es erkannt, nachgeschlagen und kapiert habe ...
Ich fasse mal zusammen, wie (ich glaube, dass) der Ablauf ist:
1. Der Anwender wählt im Tray-Menü den Eintrag ASCII aus.
2. Weil das Script im TrayOnEventMode läuft, hat es schon die ganz Zeit darauf gelauert das ein Menüpunkt ausgewählt wird und ruft _AsciiCodeA() auf.
3. _AsciiCodeA() sorgt dafür, dass alle 5 Sekunden _GenerateCodeIncrement() aufgerufen wird.
4. _GenerateCodeIncrement() ruft wiederum _AsciiCodeB() auf, welches die eigentlich gewollte Berechnung (hier: Kodierungen) nur für den Wert 32 durchführt und die Variable für den nächsten Aufruf der Funktion auf 33 erhöht.
5. AdlibUnRegister("_GenerateCodeIncrement") wird aufgerufen, damit die Berechnung nicht erneut von 32 aus beginnt. (Wie funktioniert das?)
6. Nun könnte der Anwender im Tray-Menü z. B. den Eintrag Info3 auswählen. Der TryTip wird angezeigt und danach fährt die Berechnung der Kodierungen an der Stelle fort, an der sie ausgesetzt wurde. (Warum?)
Kannst du mir die Schritte 5 und 6 nochmal genau erklären (sofern ich die Schritte 1- 4 richtig verstanden habe :wacko: )?
Habe den ersten Vorschlag umgesetzt, er funktioniert!
Aber wenn ich Informationen aus den ausgelagerten .exe-Dateien zurück in das aufrufende Skript zurückbekommen möchte, um sie dort auszuwerten wirft das Folgeprobleme auf, denen ich mich (ggf.: noch) nicht gewachsen fühle.
Dein zweiter Ansatz ist nachvollziehbar, von mir als Einsteiger jedoch (ggf.: noch) nicht umsetzbar.
DANKE auch dir!
Uuups... Dinner 4-1 verpasst...
Schönen Abend noch und einen guten Rutsch
Freundliche Grüße
merlinuwe
Hi Raupi,
danke für deinen Beitrag.
Habe das Script mal mit TrayTip statt mit MsgBox versehen. Auch damit funktioniert der Aufruf der Funktionen nicht unabhängig voneinander. Selbst die Funktion ExitScript() wartet schön brav, bis alle anderen angeklickten Funktionen aufgerufen und beendet wurden.
Freundliche Grüße
merlinuwe
hi name22,
hi alpines,
vielen Dank für eure Tipps.
Habe das Problem erst einmal vereinfacht, damit man nicht von dem Gesamtskript erschlagen wird und dann versucht, die Lösung mit
[autoit]
Opt("TrayOnEventMode", 1)
und der Hilfefunktion umzusetzen:
##NoTrayIcon
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 11) ; Standard Traymenüeinträge (Skript pausieren/beenden) werden nicht angezeigt.
;TraySetClick(16) ; Nur wenn die zweite Maustaste gedrückt wird, wird das Traymenü anzeigt.
[/autoit][autoit][/autoit][autoit]TrayCreateItem("Info1")
TrayItemSetOnEvent(-1, "ShowInfo1")
TrayCreateItem("Info2")
TrayItemSetOnEvent(-1, "ShowInfo2")
TrayCreateItem("")
[/autoit][autoit][/autoit][autoit]TrayCreateItem("Beenden")
TrayItemSetOnEvent(-1, "ExitScript")
TraySetState()
[/autoit][autoit][/autoit][autoit]While 1
Sleep(10) ; CPU-Last verhindern
WEnd
Exit
[/autoit][autoit][/autoit][autoit][/autoit][autoit]; Funktionen
Func ShowInfo1()
MsgBox(0, "Info1", "Tray OnEvent Demo")
EndFunc ;==>ShowInfo
Func ShowInfo2()
MsgBox(2, "Info2", "Tray OnEvent Demo")
EndFunc ;==>ShowInfo
Func ExitScript()
Exit
EndFunc ;==>ExitScript
Leider ist es immer noch nicht so, dass ich die Funktionen unabhängig voneinander aufrufen kann. Wenn ich Info1 aufrufe, erhalte ich das Messagefenster Info1. Wenn ich danach Info2 aufrufe (ohne das erste Fenster mit OK zu bestätigen) passiert (noch) nichts. Erst dann, wenn ich das Fenster Info1 mit "Ok" schließe, taucht das Fenster Info2 auf.
Das Fenster Info2 soll aber angezeigt werden, auch wenn das Fenster Info1 noch nicht vom Anwender geschlossen wurde.
Daraus schließe ich messerscharf, dass ich deine (name22) Problemlösung nicht richtig verstanden/umgesetzt habe.
Helft ihr mir bitte weiter?
Freundliche Grüße
merlinuwe
Hallo liebe Helfer,
habe soeben ein Skript erstellt, welches ein Tray-Menü anlegt. Das komplette Skript ist auch beigefügt. Unter dem Menüpunkt "Dezimal, ..." kann man eine Funktion _AsciiCode() aufrufen.
(Codeauszüge entfernt, merlinuwe; vgl. meinen Folgebeitrag)
Zwei Fragen:
Ich möchte quasi die Menüpunkte (Funktionen) des Tray-Menüs unabhängig voneinander aufrufen können.
Freue mich auf jede Hilfe (z. B. einen Hinweis auf ein existierendes Tutorial zum Thema TrayMenü).
Freundliche Grüße
merlinuwe
Danke für die Hinweise. Hier ist das umgeschriebene, nun zur Zufriedenheit funktionierende Programm:
#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1) ; OnEvent-Funktionen werden nur aufgerufen, wenn die Option GUIOnEventMode auf 1 gesetzt ist
Opt("GUICoordMode", 1) ; 1 = absolute Koordinaten (Standard) relativ zur Dialog Box.
geschaeftsfaehigkeit()
[/autoit] [autoit][/autoit] [autoit]Func geschaeftsfaehigkeit()
Global $nMsg, $newtext
Global $radio1a, $radio1b, $radio1c, $radio2a, $radio2b, $radio2c ; Radio-Buttons
Global $label1 ; Textfeld mit Ergebnis
Local $r1a, $r1b, $r1c, $r2a, $r2b ; Handles der Radiobuttons
Global $beendenbutton ; Handle des Beenden-Buttons
GUICreate("Geschäftsfähigkeit ermitteln", 560, 240, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX)) ;
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateGroup("Alter eingrenzen" , 5, 5, 140, 100)
$radio1a = GUICtrlCreateRadio("< 7 Jahre" , 10, 30, 120, 20)
$radio1b = GUICtrlCreateRadio(">= 7 UND < 18 Jahre" , 10, 50, 120, 20)
$radio1c = GUICtrlCreateRadio(">= 18 Jahre" , 10, 70, 120, 20)
GUICtrlSetState($radio1b, $GUI_CHECKED) ; Checkbox aktivieren
GUICtrlCreateGroup("Art der Geistestätigkeit", 5, 110, 545, 80)
$radio2a = GUICtrlCreateRadio("nicht nur vorübergehende krankhafte Störung der Geistestätigkeit, die die freie Willensbestimmung ausschließt", 10, 135, 535, 20)
$radio2b = GUICtrlCreateRadio("keine Störung der Geistestätigkeit", 10, 155, 535, 20)
GUICtrlSetState($radio2b, $GUI_CHECKED) ; Checkbox aktivieren
$beendenbutton = GUICtrlCreateButton("&Beenden", 495, 200) ; Beenden-Button
GUICtrlSetOnEvent($beendenbutton, "_exit") ; Beenden des Programms über den Beenden-Button
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit") ; Beenden des Programms über das Kreuz oben rechts
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "_exit") ; Damit man das Progamm auch mit ESC sofort beenden kann
[/autoit] [autoit][/autoit] [autoit]$label1 = GUICtrlCreateLabel($newtext, 10, 200, 145, 40) ; Das Textfeld, in dem das Ergebnis angezeigt wird
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW) ; Anzeige der Dialogbox mit allen GUICtrlCreate ...
[/autoit] [autoit][/autoit] [autoit]While 1
logik()
UpdateTextControl($label1, $newtext)
WEnd
EndFunc ;==>geschaeftsfaehigkeit
Func UpdateTextControl($label1, $newtext) ; damit das Label nicht flimmert wird die Variable $newtext nur bei einer tatsächlichen Änderung neu beschrieben
If GUICtrlRead($label1) <> $newtext Then
GUICtrlSetData($label1, $newtext)
EndIf
EndFunc ;==>UpdateTextControl
Func _exit() ; Für das Beenden des Programms
Exit 0
EndFunc
Func logik() ; hier liegt die juristische Logik des Problems
[/autoit] [autoit][/autoit] [autoit]$r1a = GUICtrlRead($radio1a) ; < 7
$r1b = GUICtrlRead($radio1b) ; >=7 < 18
$r1c = GUICtrlRead($radio1c) ; >= 18
$r2a = GUICtrlRead($radio2a) ; krankhafte Störung der Geistestätigkeit
$r2b = GUICtrlRead($radio2b) ; keine krankhafte Störung der Geistestätigkeit
;If (($r1a = 1 Or $r1b = 1 Or $r1c = 1) And $r2a = 1) Or ($r1a = 1) Then ; kompliziertere Lösung ...
If $r1a = 1 Or $r2a = 1 Then ; einfachere Lösung
$newtext = "geschäftsunfähig"
ElseIf $r1b = 1 And $r2b = 1 Then
$newtext = "beschränkt geschäftsfähig"
ElseIf $r1c = 1 And $r2b = 1 Then
$newtext = "geschäftsfähig"
EndIf
EndFunc
Edit Oscar: Bitte bei längeren Scripten immer auch den Spoiler-Tag benutzen. Habe ich hier mal eingefügt.
Habe ein kleines Programm zum Thema Geschäftsfähigkeit gebastelt. Einige Aspekte bekomme ich nicht in den Griff:
#include <ButtonConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>
geschaeftsfaehigkeit()
Func geschaeftsfaehigkeit() Global $nMsg, $newtext Local $radio1a, $radio1b, $radio1c, $radio2a, $radio2b, $radio2c ; Radio-Buttons Local $label1 ; Textfeld mit Ergebnis Local $r1a, $r1b, $r1c, $r2a, $r2b ; Handles der Radiobuttons Global $beendenbutton ; Handle des Beenden-Buttons
GUICreate("Geschäftsfähigkeit", 560, 240, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX)) ; GUISetState(@SW_SHOW) ; Anzeige der leeren Dialogbox
GUICtrlCreateGroup("Alter eingrenzen", 5, 5, 140, 100) $radio1a = GUICtrlCreateRadio("< 7 Jahre", 10, 30, 120, 20) $radio1b = GUICtrlCreateRadio(">= 7 UND < 18 Jahre", 10, 50, 120, 20) $radio1c = GUICtrlCreateRadio(">= 18 Jahre", 10, 70, 120, 20) GUICtrlSetState($radio1b, $GUI_CHECKED) ; Checkbox aktivieren
GUICtrlCreateGroup("Art der Geistestätigkeit", 5, 110, 545, 80) $radio2a = GUICtrlCreateRadio("nicht nur vorübergehende krankhafte Störung der Geistestätigkeit, die die freie Willensbestimmung ausschließt", 10, 135, 535, 20) $radio2b = GUICtrlCreateRadio("keine Störung der Geistestätigkeit", 10, 155, 535, 20) GUICtrlSetState($radio2b, $GUI_CHECKED) ; Checkbox aktivieren
$beendenbutton = GUICtrlCreateButton("B&eenden", 495, 200) ; Beenden-Button
While 1 $iOldOpt = Opt("GUICoordMode", 1) Sleep(800) beenden()
$r1a = GUICtrlRead($radio1a) ; < 7 $r1b = GUICtrlRead($radio1b) ; >=7 < 18 $r1c = GUICtrlRead($radio1c) ; >= 18 $r2a = GUICtrlRead($radio2a) ; krankhafte Störung der Geistestätigkeit $r2b = GUICtrlRead($radio2b) ; keine krankhafte Störung der Geistestätigkeit
If (($r1a = 1 Or $r1b = 1 Or $r1c = 1) And $r2a = 1) Or ($r1a = 1) Then $newtext = "geschäftsunfähig"
ElseIf $r1b = 1 And $r2b = 1 Then $newtext = "beschränkt geschäftsfähig"
ElseIf $r1c = 1 And $r2b = 1 Then $newtext = "geschäftsfähig"
EndIf
GUICtrlSetPos($label1, 20, 200) ;UpdateTextControl($label1, $newtext) $label1 = GUICtrlCreateLabel($newtext, -1, -1, 145, 40) ; ;GUISetState(@SW_UNLOCK) WEnd ExitEndFunc ;==>geschaeftsfaehigkeit
Func UpdateTextControl($label1, $newtext) If GUICtrlRead($label1) <> $newtext Then GUICtrlSetData($label1, $newtext) EndIfEndFunc ;==>UpdateTextControl
[/autoit][autoit][/autoit][autoit]Func beenden()
$nMsg = GUIGetMsg() ; Aktuelles GUI Event abfragen Switch $nMsg ; Welches Event ist eingetreten? Case $GUI_EVENT_CLOSE ; Schließen-Button (X oben rechts) Exit ; Beenden Case $beendenbutton ; Klick auf Beenden-Button? Dann... Exit ; Beenden Case Else ; do nothing ... EndSwitchEndFunc ;==>beenden
Liebe Helfer,
gerade versuche ich eine Videodatei aus einem autoit Skript aufzurufen.
Dieser cmd-Aufruf funktioniert:
C:\Program Files\VideoLAN\VLC>vlc -vvv "C:\Users\User\Dropbox\Scriptprogrammierung\AutoIt0.1\AlterBerechnen\video\For_hes_a_jolly_good_fellow.mp4
Aber dieser Aufruf unter autoit3 nicht:
[autoit]
$film=@ScriptDir&"\video\For_hes_a_jolly_good_fellow.mp4"
$parameter=" - vvv "
ShellExecuteWait(@ProgramFilesDir & "\VideoLAN\VLC\vlc" &'"'&$parameter & $film&'"') ; funktioniert nicht
ShellExecuteWait("C:\Program Files\VideoLAN\VLC\vlc -vvv" & "C:\Users\User\Dropbox\Scriptprogrammierung\AutoIt0.1\AlterBerechnen\video\For_hes_a_jolly_good_fellow.mp4") ; funktioniert auch nicht
Hat vielleicht jemand eine möglichst einfache Lösung zur Umsetzung? Das Video soll (möglichst) im Fullscreen Modus ausgeführt werden. Danach kann das Fenster geschlossen werden und das autoit Skript soll weiterlaufen.
-merlinuwe