 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Daarther
Anmeldedatum: 23.06.2008 Beiträge: 8 Wohnort: DD
|
Verfasst am: Sa Jun 28, 2008 11:27 pm Titel: Werte in einem AHK Script manipulieren?! |
|
|
Hallo.
Mein Problem:
Ich habe ein AHK Script(AHK1) in dem ich ab und zu Werte verändern muss (Mouskoordinaten, Anzahl von Tabs,...). Das möchte ich gerne tun, ohne das Script selbst zu öffnen und alle Werte per Hand einzutragen.
Also würde ich nun gerne ein "ADMIN SCRIPT" schreiben, welches bestimmte Werte in dem oben genannten AHK Script verändert.
Dieses "ADMIN SCRIPT" soll also ein Eingabefeld öffnen, in das ich alle relevanten Werte eintrage und diese Werte sollen dann dem AHK1 Script verändert werden.
-Wie gehe ich da vor?
-Welche Befehle könnten mir was nützen?
Auch dieses mal soll das Programm recht einfach und zeitnah erstellt werden.
Ich habe leider nicht viel Zeit mich in die AHK Doku einzulesen und habe nach einigem Suchen nichts zu diesem Thema gefunden.
Ich benötige lediglich etwas Anreiz, was die Befehle angeht...
Also das Problem nochmal Zusammengefasst:
-Ich habe ein AHK Script (AHK1)
-Ich möchte in diesem Script einige Werte ändern, ohne das Script selbst zu Editieren/Aufzurufen
-Es soll ein weiteres Script (AdminScript) erstellt werden, mit dessen Hilfe, man die Position der bestimmten Werte in Script AHK1 sucht
- durch ein Eingabefeld möchte ich gern einen neuen Wert erfassen und an die ermittelte Positon im AHK1-Script schreiben
Tipps und Tricks erwünscht.
mfg.Daarther _________________ "I can't get enough of that wonderful Duff!"
[Homer J. Simpson] |
|
| Nach oben |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 1122 Wohnort: Berlin
|
Verfasst am: So Jun 29, 2008 7:15 am Titel: |
|
|
Moin,
zuerst einmal musst Du für alle Werte, die sich ändern können, Variablen mit Standardvorgaben erstellen. Wenn Du die sauber kommentierst und im Kopf des Skripts versammelst, verliert das Ändern per Editieren einiges an Schrecken.
Wenn es um benutzerabhängige Einstellungen geht, nimmt man dafür gewöhnlich eine INI-Datei. Du kannst die INI, wenn sie nicht existiert, beim Start des Skripts selbst mit den Standardvorgaben erstellen. Der Gui oder dem Traymenü fügst Du einen Menüeintrag "Einstellungen" o.ä. hinzu und lässt den Benutzer diese dann über eine Einstellungsgui ändern.
Du kannst die Variablen auch in eine #Include-Datei auslagern. Die kann dann (notfalls mit Notepad) einzeln editiert werden. Das geht aber nur bei nicht kompilierten Skripten.
Die dritte Möglichkeit ist die Auslagerung in eine normale Textdatei mit Variable=Wert Paaren. Die lässt sich per Loop, Read, File auch in kompilierte Skripte einlesen.
Die Übernahme der Änderungen im laufenden Skript kannst Du dann erforderlichenfalls mit einem Reload erzwingen. _________________ Hilfe zur Hilfe
(de)nick |
|
| Nach oben |
|
 |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 883 Wohnort: Zuhause
|
Verfasst am: Di Jul 01, 2008 9:20 am Titel: |
|
|
| denick hat Folgendes geschrieben: | Moin,
Die dritte Möglichkeit ist die Auslagerung in eine normale Textdatei mit Variable=Wert Paaren. Die lässt sich per Loop, Read, File auch in kompilierte Skripte einlesen.
Die Übernahme der Änderungen im laufenden Skript kannst Du dann erforderlichenfalls mit einem Reload erzwingen. |
Die Notwendigkeit einen Reload des Skriptes auszuführen besteht nicht. Änderungen können auch direkt übernommen werden, wie das Beispiel zeigt:
| Code: | ; Multiple Variablen Reinterpretation / unter zLib Lizenz herausgegeben
; (c|w) 2008 by derRaphael@oleco.net
; Dieser Text dient nur zum Veranschaulichen der Funktionsweise.
; Die Variablenwerte könnten auch aus einer vom AHK Script erzeugten
; Datei herkommen. Der Einfachheit halber, habe ich sie direkt in
; den Quelltext gesetzt.
; >> Um Texte aus einer Datei einzulesen, verwendet man aufgrund
; der Geschwindigkeit: FileRead,VariablenWerte,\Pfad\zur\Datei.txt
VariablenWerte=
(Join`n
apfel:="rot"
banane:="gelb"
kiwi:="grün"
pflaume:="blau"
)
; Ein kleines GUI zum Testen:
Gui, Add, Button, w300 gApfel , Variablenwert 'APFEL' anzeigen
Gui, Add, Button, w300 gBanane , Variablenwert 'BANANE' anzeigen
Gui, Add, Button, w300 gKiwi , Variablenwert 'KIWI' anzeigen
Gui, Add, Button, w300 gPflaume, Variablenwert 'PFLAUME' anzeigen
Gui, Add, Edit, w300 r5 vVarText, %VariablenWerte%
Gui, Add, Button, w300 gVariablenÜbernahme, Variablen aus Text neu zuweisen
Gui,Show,,Variablentest: Interpretieren von Variablen zur Laufzeit
return
; Gui geschlossen / Mit Escape beendet
GuiClose:
GuiEscape:
ExitApp
; Darstellung der Variablen
Apfel:
MsgBox Der Wert der Variable Apfel lautet: "%Apfel%"
return
Banane:
MsgBox Der Wert der Variable Banane lautet: "%Banane%"
return
Kiwi:
MsgBox Der Wert der Variable Kiwi lautet: "%Kiwi%"
return
Pflaume:
MsgBox Der Wert der Variable Pflaume lautet: "%Pflaume%"
return
VariablenÜbernahme:
; Alle Werte des Textes Variablenwerte in das ahkSkript übernehmen
; Bitte achte auf die richte Syntax beim Erstellen der Variablentexte
; Nicht Autohotkey übernimmt die Auswertung, sondern das Script selbst.
; Da idealerweise die Texte ebenfalls vom Script erstellt werden, habe
; ich auf eine erweiterte verzichtet.
; D.h. die Zuweisung muss _immer_ so erfolgen:
; variablenname:="wert"
; Es können Variablennamen können keine Variablen zugewiesen werden,
; da keine multiple Dereferenzierung vorgenommen wird. Ist zwar machbar,
; jedoch aufwendiger.
Gui, Submit, Nohide ; Übernahme des Textes aus der Gui
VariablenWerte := VarText
Loop,Parse,Variablenwerte,`n
{
Variable := RegExReplace(A_Loopfield,"\:=.*") ; in der Variable ist nun der Name
; unser zukünftigen Variable gespeichert
Wert := RegExReplace(A_LoopField,".*?\:=") ; in dieser Variable ist der künftige
; neue Wert gespeichert. An dieser Stelle
; sind die Anführungszeichen noch da
Wert := RegExReplace(Wert,"^""|""$") ; Führende und abschließende Quotes
; entfernen
StringReplace,Wert,Wert,"",",All ; Doppelte Quotes durch einfache tauschen
%Variable% := Wert ; Durch die Prozentzeichen wird Autohotkey
; angewiesen, den Inhalt als Variablennamen
; zu interpretieren
}
return |
Bei Kommentaren, Anregungen, Wünschen oder auch diese klassichen "Wie-geht-dem?!??" einfach melden
grüße
derRaphael _________________
|
|
| Nach oben |
|
 |
denick (n-l-i) Gast
|
Verfasst am: Di Jul 01, 2008 4:48 pm Titel: |
|
|
Moin,
| denick hat Folgendes geschrieben: | | Die Übernahme der Änderungen im laufenden Skript kannst Du dann erforderlichenfalls mit einem Reload erzwingen. |
Ich denke, dass FileRead gegenüber einer Loop, Read bei Einstellungsdateien keinen spürbaren Vorteil bringt.
Für die Einstellungsdatei würde ich das INI-Format Variable=Wert bevorzugen, weil diese Zuweisungen üblicherweise einfacher Natur sind. Komplexere Geschichten sind m.E. im Skript selbst besser aufgehoben. Das macht die Angelegenheit dann sehr übersichtlich:
| Code: | #NoEnv
; Datei Einstellungen.txt
Einstellungen_txt =
(
VAR1=Apfel
VAR2=Birne
VAR3=Pflaume
)
VAR1=Brombeere
VAR2=Erdbeere
VAR3=Himbeere
Gui, Margin, 10, 10
Gui, Add, Text, Section h20 0x200, Obst 1:
Gui, Add, Text, hp y+10 0x200, Obst 2:
Gui, Add, Text, hp y+10 0x200, Obst 3:
Gui, Add, Edit, ys w100 hp vED1, %VAR1%
Gui, Add, Edit, wp hp vED2, %VAR2%
Gui, Add, Edit, wp hp vED3, %VAR3%
Gui, Add, Button, xs gLoad, Neu einlesen!
Gui, Show, , Variablen
Return
GuiClose:
GuiEscape:
ExitApp
Load:
Loop, Parse, Einstellungen_txt, `n ; Loop, Read, Einstellungen.txt
{
RegExMatch(A_LoopField, "(?P<Name>[^=]+)=(?P<Wert>.*)", Var) ; A_LoopReadLine
; Tricky: Links wird der Inhalt der Variablen als Variablenname
; interpretiert, rechts direkt verwendet.
%VarName%=%VarWert%
}
GuiControl, , ED1, %VAR1%
GuiControl, , ED2, %VAR2%
GuiControl, , ED3, %VAR3%
Return |
 |
|
| Nach oben |
|
 |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 883 Wohnort: Zuhause
|
Verfasst am: Mi Jul 02, 2008 1:32 pm Titel: |
|
|
danke, denick für den besseren regex. ich nehme es als lehrendes beispiel um meine fähigkeiten hierin zu verbessern ... capturing subpattern sind da nach wie vor eine schwachstelle ... nochmals danke
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
|