Okay, hab nun doch ein Beispiel reingesetzt und den Startpost überarbeitet. Muss jetzt los zum Knechten. Bis morgen.
Beiträge von Lottich
-
-
Vielleicht kennt das ja auch schon jemand von euch und kann mir so weiter helfen OHNE dass ich ein funktionierendes reproduzierendes Beispielscript anfertigen muss.
Ich habe 2 Scripte. Script 1 ist das Hauptprogramm mit einem Button, über den ich das 2. Script (dann als .exe) starte. Dieses 2. Script wartet auf Nutzereingaben. Wenn ich dann auf "okay" klicke, soll mit diesen Daten eine neue Exe Datei erstellt werden.
Das funktioniert per Komandozeilenaufruf des Compilers.Beispielscript
AutoIt
Alles anzeigen#include <File.au3> #include <misc.au3> Global $Basispfad= @ScriptDir & "\erstellte Files\" Global $Template = @ScriptDir & "\" & "Template.au3" Global $Tempfile = @ScriptDir & "\" & "Tempfile.au3" Global $INI_FILE = @ScriptDir & "\" & "Data\INIFile.ini" Global $btnOkay, $input1, $input2, $input3, $input4, $input5 Global $btnExit, $input6, $input7, $input8, $input9 Global $hGui = GUICreate("mein GUI", 300, 330, 1020, 50) GUISetFont(10) GUICtrlCreateLabel("Wert 1", 10, 10, 100, 25) GUICtrlCreateLabel("Wert 2", 10, 40, 100, 25) GUICtrlCreateLabel("Wert 3", 10, 70, 100, 25) GUICtrlCreateLabel("Wert 4", 10, 100, 100, 25) GUICtrlCreateLabel("Wert 5", 10, 130, 100, 25) GUICtrlCreateLabel("Wert 6", 10, 160, 100, 25) GUICtrlCreateLabel("Wert 7", 10, 190, 100, 25) GUICtrlCreateLabel("Wert 8", 10, 220, 100, 25) GUICtrlCreateLabel("Wert 9", 10, 250, 100, 25) $btnOkay = GUICtrlCreateButton("Okay", 10, 300, 80, 20) $btnExit = GUICtrlCreateButton("Abbruch", 210, 300, 80, 20) $input1 = GUICtrlCreateInput("", 120, 7, 170, 20) $input2 = GUICtrlCreateInput("", 120, 34, 170, 20) $input3 = GUICtrlCreateCombo("", 120, 61, 170, 20) $input4 = GUICtrlCreateCombo("", 120, 92, 170, 20) $input5 = GUICtrlCreateCombo("", 120, 123, 170, 20) $input6 = GUICtrlCreateInput("", 120, 154, 170, 20) $input7 = GUICtrlCreateInput("", 120, 185, 170, 20) $input8 = GUICtrlCreateCombo("", 120, 216, 170, 20) $input9 = GUICtrlCreateCombo("", 120, 247, 170, 20) GUICtrlSetData($input1, "Eingabe 1") GUICtrlSetData($input2, "Eingabe 2") GUICtrlSetData($input3, "Eingabe 3a|Eingabe 3b|Eingabe 3c|Eingabe 3e", "Eingabe 3a") GUICtrlSetData($input4, "Eingabe 4a|Eingabe 4b", "Eingabe 4a") GUICtrlSetData($input5, "Eingabe 5a|Eingabe 5b", "Eingabe 5a") GUICtrlSetData($input6, "") GUICtrlSetData($input7, "") GUICtrlSetData($input8, "Eingabe 8a|Eingabe 8b|Eingabe 8c|Eingabe 8d", "Eingabe 8a") GUICtrlSetData($input9, "Eingabe 9a|Eingabe 9b|Eingabe 9c|Eingabe 9d", "Eingabe 9a") GUISetState() While 1 Switch GUIGetMsg() Case -3, $btnExit Exit Case $btnOkay _neuesTool() Exit EndSwitch WEnd Func _neuesTool() Local $var1 = GUICtrlRead($input1), $var2 = GUICtrlRead($input2), $var3 = GUICtrlRead($input3), $var4 = GUICtrlRead($input4), $var5 = GUICtrlRead($input5) Local $var6 = GUICtrlRead($input6), $var7 = GUICtrlRead($input7), $var8 = GUICtrlRead($input8), $var9 = GUICtrlRead($input9) Local $compilerPath = "", $PathDest = $Basispfad & " " & $var4 & " - " & $var1 Local $temp = StringSplit(@AutoItExe,"\") For $i = 1 to $temp[0]-1 Step +1 $compilerPath = $compilerPath & $temp[$i] & "\" Next $compilerPath = $compilerPath & "Aut2Exe\Aut2exe.exe" FileCopy($Template, $Tempfile, 9); erstellt von der Vorlage eine temporäre .au3 Datei _FileWriteToLine($Tempfile, 16, '$var1 = "' & $var1 & '"', True) ; Schreibt die Daten in die temporäre Datei _FileWriteToLine($Tempfile, 17, '$var2 = "' & $var2 & '"', True) _FileWriteToLine($Tempfile, 18, '$var3 = "' & $var3 & '"', True) _FileWriteToLine($Tempfile, 19, '$var4 = "' & $var4 & '"', True) _FileWriteToLine($Tempfile, 20, '$var5 = "' & $var5 & '"', True) _FileWriteToLine($Tempfile, 21, '$var6 = "' & $var6 & '"', True) _FileWriteToLine($Tempfile, 22, '$var7 = "' & $var7 & '"', True) _FileWriteToLine($Tempfile, 23, '$var8 = "' & $var8 & '"', True) _FileWriteToLine($Tempfile, 24, '$var9 = "' & $var9 & '"', True) RunWait('"' & $compilerPath & '" /in "' & $Tempfile & '" /out "' & $PathDest & '.exe" /x86') If FileExists($PathDest & '.exe') Then IniWrite($INI_FILE, $var1, "Wert 2", $var2) IniWrite($INI_FILE, $var1, "Wert 3", $var3) IniWrite($INI_FILE, $var1, "Wert 4", $var4) IniWrite($INI_FILE, $var1, "Wert 5", $var5) IniWrite($INI_FILE, $var1, "Wert 6", $var6) IniWrite($INI_FILE, $var1, "Wert 7", $var7) IniWrite($INI_FILE, $var1, "Wert 8", $var8) IniWrite($INI_FILE, $var1, "Wert 9", $var9) Else MsgBox(0,"Fehler", "Datei wurde nicht erstellt...", 2) EndIf EndFuncWenn ich das ganze via SciTE ausführe (per F5) funktioniert es wunderbar. Die neue .exe wird erfolgreich erstellt.
ABER: Sobald ich das ganze im compilierten Zustand versuche funktioniert dieser Aufruf scheinbar nicht mehr bzw wird ignoriert. Alles andere im Script wird dargestellt und funktioniert.Nach dieser Codezeile frage ich ab, ob die neue .exe existiert. Jetzt kommt das aberwitzige:
wenn die .exe BEREITS VORHANDEN ist und ich erstelle eine neue mit selben Namen im compiliertem Zustand, DANN klappt es komischerweise.
Lösche ich diese Datei und versuche es erneut, dann klappts wieder nicht.Bin mittlerweile genervt, weil ich nicht mehr weiter weiss.
Edit: Beispielscript hinzugefügt
alles sensible entfernt, sonst ist alles gleich -
-
Weil dein Code (scheinbar) nicht wirklich durchdacht ist.
versuchs mal damit:AutoIt
Alles anzeigenFunc fritz() local $var = False While 1 If WinExists("AVMCALLBox") Then $var = True WinActivate("AIMP3") Send("{SPACE}") Do Sleep(50) ; Funktion "schläft" bis das Fenster nicht mehr existiert Until WinExists("AVMCALLBox") = False $var = False WinActivate("AIMP3") Send("{SPACE}") ExitLoop ; Damit du aus der Schleife rauskommst und die Funktion verlassen wird EndIf WEnd EndFunc ;==>fritz -
Das ist, weil du diese Möglichkeit nicht angegeben hast.
Dein CodeBeispiel "fragt" eben nur diesen einen Zustand ab.AutoItIf WinActive("[CLASS:Notepad]") Then MsgBox(0, "", "Das Fenster ist aktiv") Else MsgBox(0, "", "Das Fenster ist NICHT aktiv") EndIfDieser Code "fragt" beide Zustände ab und handelt entsprechend.
Man kann sich AutoIt durchaus selber beibringen, man muss die Hilfe nur richtig lesen
-
Okay, das klappt. Danke @Kanashius für den Wink in die richtige Richtung
@misterspeed ich bau grad ein Server-Client Tool, bei dem es nötig ist, dass ich die Clienten eindeutig identifizieren muss/soll. Dabei will ich Mogeleien
so gut es geht ausschliessen/ verhindern. Ja, ich weiss, dass wenn man will und das KnowHow hat, man alles umgehen kann, aber Otto NormalUser wird das hoffentlich nicht drauf haben.
Bei festgestellten Mogelversuchen wird die Serververbindung getrennt. Beim 2. mal wird der User gesperrt und beim 3. mal löscht sich die Client.exe.Das wird mein 1. Projekt, mit dem ich was verdienen möchte

-
Das bringt mich auf eine Idee:
- im Template die 1. 4 Zeilen zu leere Zeilen machen
- das Template kopieren als zB temp.au3
- dann per _FileWriteToLine() die 4 Zeilen befüllen ala '$var1 = "blibla" '
- danach das Temp.au3 kompilieren...könnte funktionieren. Das versuch ich mal.
-
Hallo Au3 Freunde
Ziel:
- eine .exe Datei erstellen, durch Übergabe von Parametern soll sie einmalig werden
- diese Parameter sollen also "hardcoded" seinSinn und Zweck:
Ich möchte "personengebundene" Exefiles erstellen. Um das Ganze so einfach wie möglich zu halten, möchte ich das eigentliche Script
als Template verwenden und per Buttonklick die "personengebundenen Daten" als Parameter an das Template übergeben.Fortschritt:
Das Erstellen der Exe funktioniert, aber nicht wie ich es will.Hier mein TestScript
AutoIt
Alles anzeigenGlobal $GuiName = "Titel des GUI" Global $hGui = GUICreate($GuiName, 300,200, 1020, 50) GUISetFont(10) GUICtrlCreateLabel("Wert1:", 10, 10, 100, 25) GUICtrlCreateLabel("Wert2:", 10, 40, 100, 25) GUICtrlCreateLabel("Wert3:", 10, 70, 100, 25) GUICtrlCreateLabel("Wert4:", 10, 100, 100, 25) Global $btnOkay = GUICtrlCreateButton("Okay", 10, 170, 80, 20) Global $btnExit = GUICtrlCreateButton("Abbruch", 210, 170, 80, 20) Global $input1 = GUICtrlCreateInput("alfa@beta.de", 120, 7, 170, 20) Global $input2 = GUICtrlCreateInput("Herr Alpha Beta", 120, 34, 170, 20) Global $input3 = GUICtrlCreateCombo("", 120, 61, 170, 20) Global $input4 = GUICtrlCreateCombo("", 120, 88, 170, 20) GUICtrlSetData($input3, "input 3a|input 3b", "input 3a") GUICtrlSetData($input4, "input 4a|input 4b|input 4c|input 4d", "input 4c") GUISetState() While 1 Switch GUIGetMsg() Case -3, $btnExit Exit Case $btnOkay _neuesTool() Exit EndSwitch WEnd Func _neuesTool() Local $commandolinie = " -" & GUICtrlRead($input1) & " -" & GUICtrlRead($input2) & " -" & GUICtrlRead($input3) & " -" & GUICtrlRead($input4) Local $compilerPath = "" ,$PathSource = FileOpenDialog("Script auswählen", @ScriptDir, "Au3 Scripts (*.au3)") Local $PathDest = FileSaveDialog("Speichern unter", @ScriptDir, "Exe (*.exe)", 16, "test") Local $temp = StringSplit(@AutoItExe,"\") For $i = 1 to $temp[0]-1 Step +1 $compilerPath = $compilerPath & $temp[$i] & "\" Next $compilerPath = $compilerPath & "Aut2Exe\Aut2exe.exe" ;~ RunWait('"' & $compilerPath & '" /in "' & $PathSource & $commandolinie & '" /out "' & $PathDest & '" /x86') ; Fehler: Aut2Exe Error Line 0 -> Error opening the file... ; will arbeiten mit: ...\bliblub.au3 -alfa@beta.de -Herr Alpha Beta -input 3a -input 4c ;~ RunWait('"' & $compilerPath & '" /in "' & $PathSource & $commandolinie & '" /out "' & $PathDest & '.exe" /x86') ; Fehler: Aut2Exe Error Line 0 -> Error opening the file... ; will arbeiten mit: ...\bliblub.au3 -alfa@beta.de -Herr Alpha Beta -input 3a -input 4c ;~ RunWait('"' & $compilerPath & '" /in "' & $PathSource & '" /out "' & $PathDest & $commandolinie & '" /x86') ; Fehler: es wird keine .exe erstellt, sondern nur eine "Datei" ; macht daraus: ...\test.exe -alfa@beta.de -Herr Alpha Beta -input 3a -input 4c ;~ RunWait('"' & $compilerPath & '" /in "' & $PathSource & '" /out "' & $PathDest & $commandolinie & '.exe" /x86') ; Teilerfolg: es wird zwar eine .exe erstellt, aber ; macht daraus: ...\test.exe -alfa@beta.de -Herr Alpha Beta -input 3a -input 4c.exe ;~ RunWait('"' & $compilerPath & '" /in "' & $PathSource & '" /out "' & $PathDest & '" /x86') ; Teilerfolg: es wird zwar eine .exe erstellt, aber ; es werden auf grund des Aufrufs keine Parameter übergeben... EndFunc
Was muss ich anders machen, damit einfach nur eine test.exe entsteht, in der die Parameter erfolgreich übergeben wurden?
Wenn die test.exe erstellt wurde, lass ich mir per _ArrayDisplay() die Parameter anzeigen, bekomm aber immer nur ein leeres Array angezeigt
Könnt ihr mir weiterhelfen?
Mfg Lo..
-
Das sieht ziemlich cool aus!
Genial gemacht UEZ
-
Offtopic
@alpines Warum wird hier so häufig von 3D (und höher) Arrays geschrieben? Arrays gibt doch nur als 1D und 2D?!
Also, wenn man das Array ansieht, nach unten und bei nem 2D Array zusätzlich noch nach rechts. In die Tiefe geht doch nicht.
Oder hab ich da was verpasst?/Offtopic
MfG Lo..
-
Hi Andy
meiner Meinung nach ist das mit den beleuchteten Tasten total überbewertet. Ich selbst hab die Logitech G11 mit blauen Leuchttasten.
Ist total fürn A.... selbst bei Dunkelheit und höchster Stufe ist das Licht der Tasten kaum zu sehen, denn das Licht des Monitors überstrahlt das Licht der Tasten
gefühlt zu > 90%, sodass man dann doch nah mit der Nase ran muss um zu erkennen, wo denn nun das H ist (nur ein Beispiel). Mittlerweile hab ich im Gefühl, wo
sich welche Taste befindet und mittlerweile lass ich auch das Licht an. Hab auch das Gefühl, dass es besser ist für die Augen. Aber wer weiss schon?! Vielleicht ist
rotes Tastaturlicht ja besser geeignet?! Für mich hab ich aber entschieden, dass die nächste Tastatur keine beleuchteten Tasten haben wird.und zu den programmierbaren Tasten... die G11 hat über eine Macro-Steuerung 3x18 programmierbare Tasten. Problem hierbei: diese sind via AutoIt nicht
ansprechbar. Windows selbst belegt diese Tasten mit den F-Tasten und macht anschliessend mit den Zahlen weiter. Dies macht z.B: eine _isPressed() Abfrage unsinnig.
Für mich selber benutz ich die auch nicht mehr. Auch hierbei gilt zumindest für mich, dass die nächste sowas nicht mehr braucht.
(Vielleicht kannst du als Profi ja eine Möglichkeit finden, diese Sondertasten anzusprechen. Über DLLs, da bist du ja recht fit)Leider findet man kaum noch Tastaturen, die nen USB2 Hub haben, aber NICHT leuchten...
MfG
Lo.. -
Hey Raupi,
mein schmerzlichstes Beileid nachträglich. Hoffentlich hast du den Tag einigermaßen gut über die Runden bekommen, ohne anschließenden Kater usw.
-
Hallo.
Ich halte es im Prinzip genau so wie Oscar. Zusätzlich habe ich erst kürzlich damit begonnen einen anderen Editor zu testen. "SciTE - RU" bietet noch ein Zusatzfenster an, indem
automatisch von dir erstellte Funktionen aufgelistet werden. Bei Doppelklick darauf springst du dann im Editor genau zu dieser Funktion. Erleichtert das Navigieren bei großen Scripts schon enorm. -
Danke BugFix
genau diese Version hab ich mir geholt und mein "Problem" auch schon gelöst.
Sehr gut versteckt in den Optionen konnte ich genau meine "Probleme" aktivieren, mit 2 Häkchen
Bevor ich jetzt wieder alles neu mache, würd ich gerne noch eine Frage stellen. Hab soeben bemerkt,
dass das Auskommentieren einer Zeile nicht so ist, wie es sein sollte. Das ist im herkömmlichen SciTE
ja durch 2 Varianten möglich: dem Semikolon und der Minus Taste des ZiffernblocksIch hab mir aus Bequemlichkeit angewöhnt die Ziffern-Minus-Taste zu verwenden.
Geht das im SciTE RU nicht? Bei mir schreibt er da das Minuszeichen. Oder liegt das an dem von dir
erwähnten Event Handling?Edit: Hab herausgefunden, dass ich mit STRG+Q so auskommentieren kann wie vorher mit Scite4AutoIt.
Kann ich das ändern, dass ich das auf die Ziffern-Minus-Taste legen kann? Soweit ich mitbekommen hab
basiert SciTE auf LUA und da bist du ja hier der Ansprechpartner #1
-
Hallo,
ich habe mir (endlich) SciTE-RU als AutoIt Editor zugelegt. Den Scite Ordner im AutoIt Verzeichnis hab ich gelöscht und durch neuen Scite Ordner ersetzt. Den Inhalt des Extras ordner hab ich in den bereits vorhandenen
Ordner eingefügt. Theoretisch sollte sich also, von den Pfaden her, nichts verändert haben...Also hab ich zum Test ein Script geöffnet um dort weiter zu coden, aber dabei hab ich festgestellt, dass beim Schreiben eines Standardbefehls wie Guictrlcreateblablabla nicht das gewohnte Fenster aufploppt um mir die
möglichen Befehle anzuzeigen, wie ich es bisher gewohnt war. Also muss ich jetzt jede Funktion komplett ausschreiben?? Die automatische Rechtschreibung solcher Standardfunktionen klappt auch nicht mehr.
Wenn ich schreibe guictrlcreatebutton bleibt das so und wird NICHT zu GuiCtrlCreateButton.Hat man diesen Befehl geschrieben und anschliessend die Klammer auf gemacht, so erschien bisher immer der Calltip zur entsprechenden Funktion. Das gibts nun auch nicht mehr. Sonst scheint alles zu funktionieren.
Die erkannten Funktionen werden zumindest entsprechend eingefärbt.Was muss ich machen, damit es wieder so funktioniert, wie ich es gewohnt bin??
mfG Lo..
-
Oh Wunder, ich habe die UDF noch.
Ich lade sie später wieder hoch.
Ganz kleinlaut und beinahe unterwürfig möchte ich nochmal auf dieses Zitat hinweisen. Chess, wärst du so lieb und lädst deine UDF nochmal hoch?
-
Schön, dass ich helfen konnte.
Dann kannst du das Thema ja als erledigt markieren
MfG Lo..
-
@UserProfileDir
@DesktopDir
...
...Genau aus diesem Grund gibt es Macros, wie zb diese beiden.
Die lassen sich sogar mit Variablen oder Strings verbinden ( @DesktopDir & "\Ordner6654" ) -
1. Warum soll denn der User den Pfad zur INI setzen? Warum machst DU das nicht selbst?
Wenn du den Pfad selbst bestimmst, dann wird das Programm IMMER diesen Pfad wählen, selbst beim 1000. Start.2. Wenn du dir den IniRead Befehl in der Hilfe mal näher anschaust, wird dir auffallen, dass du einen "Standardwert" setzen kannst, der automatisch genutzt wird, sollte das IniRead fehlschlagen.

-