InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

06 Nov 2019, 17:26

Hallo liebes Forum!

Ich habe bei mehreren meiner Scripts ein dasselbe Problem. Es geht um die Interaktion vom User mit dem laufenden Programm, wenn er z.B. etwas bestätigen oder zusätzliche Sachen eingeben soll. Für die erste Funktion gibt es die MsgBox, für die zweite ist eigentlich die InputBox vorgesehen.
Jetzt habe ich aber häufig etwas qualifiziertere Ansprüche an so ein Fenster. Ich würde etwa gerne drei Buttons zur Auswahl haben, wenn der User nicht nur zwischen OK/Weiter und Cancel/Abbrechen entscheiden soll, sondern es z.B. auch zwei Möglichkeiten geben soll, wie seine Eingabe verwendet wird. Bei der MsgBox läßt sich das in den Parametern einstellen, bei der InputBox anscheinend nicht.
Oder es soll mehr als eine einzige Eingabe möglich sein. Ein Beispiel wäre eine Aufforderung zur Eingabe einer Adresse.
In beiden Fällen müßte ich mir eine separate Gui konstruieren. Das wäre ja nicht so schlimm, aber wie bette ich die in das Script ein, sodaß sie von diesem aus geöffnet wird (während das natürlich seinen Lauf unterbricht!), ich dort dann die Eingaben vornehmen kann, diese in Variablen gespeichert werden, welche das Programm nachher wieder aufrufen kann, dann geschlossen wird und anschließend zurückspringt und dort mit dem ursprünglichen Script fortfährt?
Wenn ich das Ding mehrmals im Programm benutzen und die Auswertung nicht ebenfalls immer wieder neu schreiben möchte, sondern nur die Werte haben will, bestünde so eine Gui aus zwei Teilen, nämlich 1.) der Beschreibung ihres Aussehens sowie der Steuerelemente und ihrer Funktionen und 2.) der Auswertung der Eingaben und Entscheidungen der Steuerelemente.
Beide müssen aber mit einem return-Befehl abgeschlossen werden. Und hier beginnt das Dilemma: Wenn ich aus dem laufenden Programm mit Gosub die Gui aufrufe, dann versucht nach dem ersten return das Programm weiterzulaufen, der Zeiger findet nach dem zweiten aber nicht mehr zurück. Aber dann erst kann er die zu verarbeitenden Werte mitbringen.
Wie soll ich das Problem anpacken?

Viele Grüße von Meister Lampe
UnReALiTyy
Posts: 223
Joined: 06 Jun 2017, 11:38

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

06 Nov 2019, 17:37

Liest sich vermutlich komplizierter als es ist.
Mit einem Beispiel auschnitt könnte man dir sicherlich einfacher helfen.
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

07 Nov 2019, 03:09

Hier findet man ein paar Infos: https://www.autohotkey.com/docs/commands/Gui.htm#MultiWin

Ein kurzes Beispiel:

Code: Select all

Gui, Add, button,x20 y20 gzweitesGui, Abfrage
Gui, Add, text,x20 y50 w200 vAnzeige, Wert aus der Abfrage:
;Länge (w200) an den erwarteten Text anpassen
Gui, Show, w300 h100, HauptGUI
return

zweitesGui:
Gui, MyGui:Add, edit,x20 y20 w100 vVar, hallo
Gui, MyGui:Add, button,x140 y20 w50 gShowVar, ok
Gui, MyGui:Show,,Abfragefenster
return

ShowVar:
gui, submit, noHide
guicontrol,1:,anzeige, Wert aus der Abfrage: %var%
;Nummer des Gui nutzen, oder das Hauptfenster überall benennen zB. Gui, Hauptfenster:add ... Gui, Hauptfenster:show ...Guicontrol,Hauptfenster:, ...
gui,MyGui:destroy
;Das zweite Gui (Abfragefenster) wird zerstört. Man könnte es auch verstecken (hide). 
;Man muss aber immer aufpassen, dass man nicht versucht ein Fenster mit dem selben Namen erneut zu erzeugen.
return

GuiEscape:
GuiClose:
ButtonCancel:
ExitApp
User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

07 Nov 2019, 16:52

Hallo haichen!

Dein Beispiel kommt meinem Problem schon relativ nahe, nur nicht seiner Lösung. Ich möchte eben die Gui aus dem laufenden Programm heraus aufrufen können. Ich habe Dein Script mal so erweitert, daß Du sehen kannst, was ich meine.

Code: Select all

F5::
Inputbox, Eingabe, , An was für einem Wochentag bist Du geboren?
If (Eingabe = Sonntag)
	gosub haichen_Gui
	else
return

F12::
haichen_Gui:
Gui, Add, button,x20 y20 gzweitesGui, Abfrage
Gui, Add, text,x20 y50 w200 vAnzeige, Wert aus der Abfrage:
;Länge (w200) an den erwarteten Text anpassen
Gui, Show, w300 h100, HauptGUI
return

zweitesGui:
Gui, MyGui:Add, edit,x20 y20 w100 vVar, hallo
Gui, MyGui:Add, button,x140 y20 w50 gShowVar, ok
Gui, MyGui:Show,,Abfragefenster
return

ShowVar:
gui, submit, noHide
guicontrol,1:,anzeige, Wert aus der Abfrage: %var%
;Nummer des Gui nutzen, oder das Hauptfenster überall benennen zB. Gui, Hauptfenster:add ... Gui, Hauptfenster:show ...Guicontrol,Hauptfenster:, ...
gui,MyGui:destroy
;Das zweite Gui (Abfragefenster) wird zerstört. Man könnte es auch verstecken (hide). 
;Man muss aber immer aufpassen, dass man nicht versucht ein Fenster mit dem selben Namen erneut zu erzeugen.
return

GuiEscape:
GuiClose:
ButtonCancel:
ExitApp
Was unter F12 als Subroutine "haichen_gui" steht, ist genau Dein Code. Mit F12 funktioniert der auch wie vorgesehen. Wenn ich ihn aber vom laufenden Programm aufrufen lassen will geht das nicht. Als Beispiel habe ich die InputBox erstellt, die mit F5 gestartet wird und dann - je nach Eingabewert - Dein Script aufrufen soll.
Ist jetzt klar, wo ich festhänge?

Viele Grüße von Meister Lampe
UnReALiTyy
Posts: 223
Joined: 06 Jun 2017, 11:38

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

07 Nov 2019, 17:34

"" nicht vergessen dann klappt deine Version auch. ;)

Code: Select all

F5::
Inputbox, Eingabe, , An was für einem Wochentag bist Du geboren?
If (Eingabe = "Montag")
	gosub haichen_Gui
If (Eingabe = "Dienstag")
	gosub haichen_Gui
If (Eingabe = "Mittwoch")
	gosub haichen_Gui
If (Eingabe = "Donnerstag")
	gosub haichen_Gui
If (Eingabe = "Freitag")
	gosub haichen_Gui
If (Eingabe = "Samstag")
	gosub haichen_Gui
If (Eingabe = "Sonntag")
	gosub haichen_Gui
return

F12::
haichen_Gui:
Gui, Add, button,x20 y20 gzweitesGui, Abfrage
Gui, Add, text,x20 y50 w200 vAnzeige, Wert aus der Abfrage:%Eingabe%
;Länge (w200) an den erwarteten Text anpassen
Gui, Show, w300 h100, HauptGUI
exit
Und so geht es übrigens auch und man kann es verkürzen:

Code: Select all

Inputbox, Eingabe, , An was für einem Wochentag bist Du geboren?
gosub, %Eingabe%
return

F12::
Montag:
Dienstag:
Mittoch:
Donnerstag:
Freitag:
Samstag:
Sonntag:
Gui, Add, button,x20 y20 gzweitesGui, Abfrage
Gui, Add, text,x20 y50 w200 vAnzeige, Wert aus der Abfrage:%Eingabe%
;Länge (w200) an den erwarteten Text anpassen
Gui, Show, w300 h100, HauptGUI
exit
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

08 Nov 2019, 02:40

Hi UnReALiTyy,
deine If Abfrage macht genau das was sie soll. Man kann das aber noch ein wenig verbessern. Wie Du es geschrieben hast werden alle Abfragen jedesmal komplett durchlaufen. Wenn Du Freitag eingegeben hast, und das GUI erzeugt wurde, wird dann trotzdem noch geschaut ob die Eingabe Samstag oder Sonntag ist. Wenn alle Abfragen (außer der ersten) mit einem "Falls nicht" oder else if gemacht werden ist das anders. Die werden dann gar nicht mehr abgefragt. Der ganze Block aus if..else if..else if..else if wird nur bist zum ersten if durchlaufen, das als Ergebnis "wahr" liefert. Der Rest interessiert dann nicht mehr.

Code: Select all

;Eingabe war "Freitag"
If (Eingabe = "Montag") ;Nö - dann frag ich mal ob die Eingabe Dienstag war ...
	gosub haichen_Gui
Else if (...
...
Else If (Eingabe = "Freitag") ;Ja, richtig - das wars.
	gosub haichen_Gui     ; alle weiteren Else werden nicht mehr abgefagt
Und mit dem neuesten Autohotkey kann man auch Switch nehmen. Das ist genau für solche Sachen gemacht. Mit Switch testet man eine Variable (hier Eingabe) auf eine bestimmten Wert und macht dann etwas.

Code: Select all

switch Eingabe
{
case "Montag":   gosub, ..
case "Dienstag":   gosub, ..
..
}
return
Wenn Meister Lampe wirklich mit allen Wochentagen dasselbe machen will, ist aber diese Abfrage sinnvoller:

Code: Select all

Pseudocode:
Falls die Eingabe Montag oder Dienstag oder Mittwoch ...ist
      führe Subroutine Gui aus

Code: Select all

;und in Echt:
If (Eingabe = "Montag") or (Eingabe = "Dienstag")
      gosub, haichen_Gui
UnReALiTyy
Posts: 223
Joined: 06 Jun 2017, 11:38

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

08 Nov 2019, 11:59

haichen wrote:
08 Nov 2019, 02:40
Hi UnReALiTyy,
deine If Abfrage macht genau das was sie soll. Man kann das aber noch ein wenig verbessern. Wie Du es geschrieben hast werden alle Abfragen jedesmal komplett durchlaufen. Wenn Du Freitag eingegeben hast, und das GUI erzeugt wurde, wird dann trotzdem noch geschaut ob die Eingabe Samstag oder Sonntag ist. Wenn alle Abfragen (außer der ersten) mit einem "Falls nicht" oder else if gemacht werden ist das anders. Die werden dann gar nicht mehr abgefragt. Der ganze Block aus if..else if..else if..else if wird nur bist zum ersten if durchlaufen, das als Ergebnis "wahr" liefert. Der Rest interessiert dann nicht mehr.
Da muss ich dir wiedersprechen wenn die Antwort z.b. Mittwoch ist, dann führt gosub das Gui aus und danach wird ein exit ausgeführt dieses verhindert das zurückspringen zur Hauptroutine, sprich alles nach Mittwoch wird nicht mehr überprüft. Das man es aber auch anders schreiben kann wie bei dein anderen Beispielen das ist möglich, ob es nun besser oder leichter ist ist ansichstsache.

Code: Select all

F5::
Inputbox, Eingabe, , An was für einem Wochentag bist Du geboren?
If (Eingabe = "Mittwoch")
	gosub haichen_Gui
Tooltip, Wird bei eingabe von "Mittwoch" nicht ausgeführt.
return

F12::
haichen_Gui:
Gui, Add, button,x20 y20 gzweitesGui, Abfrage
Gui, Add, text,x20 y50 w200 vAnzeige, Wert aus der Abfrage:%Eingabe%
;Länge (w200) an den erwarteten Text anpassen
Gui, Show, w300 h100, HauptGUI
exit
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

08 Nov 2019, 12:24

:D Oh, dein exit habe ich übersehen. Sorry! Habe ich auch noch nicht oft gesehen. Aber geht. Viele Wege führen nach Rom.
UnReALiTyy
Posts: 223
Joined: 06 Jun 2017, 11:38

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

08 Nov 2019, 12:34

haichen wrote:
08 Nov 2019, 12:24
:D Oh, dein exit habe ich übersehen. Sorry! Habe ich auch noch nicht oft gesehen. Aber geht. Viele Wege führen nach Rom.
hehe kein Ding ;) ich nutze es auch nur an einer stelle in meinen Skripten, aber daher kannte ich diese möglichkeit.
User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

08 Nov 2019, 18:54

Hallo!
Ihr müßt bedenken, daß in meinem vorgesehenen Programm - im Gegensatz zu meinem Beispiel oben - das Script nach dem Gui weitergehen und nicht mit einer Ausgabe aufhören soll. Die eingegebenen Werte sollen im Programm als Variablen verwendet werden oder es im Ablauf entsprechend beeinflussen. Auf jeden Fall endet das nicht mit dem Schließen der Gui, sondern muß ins Hauptprogramm zurück.
Die Gui, die ich benützen möchte, ist etwas komplizierter. Sie ist zur Auswahl aus in einer externen Liste gesammelten Datensätzen über eine ListView gedacht. In meinem Script habe ich mehrere Anwedungen, die alle diese Datensätze aus dieser Liste benötigen, weshalb sie zuerst dort ausgewählt werden müssen. Deshalb soll dann am Anfang immer eine Abfrage stehen, die den aktuell vorhandenen bzw. als letztes noch verwendeten Datensatz angibt, dazu die Optionen Weiter , Ändern und Abbrechen bietet (übrigens auch eines der Probleme, die ich angesprochen habe!). Bei Ändern soll dann die Subroutine mit der Gui aufgerufen werden.
So sieht die berites fertige Gui aus:

Code: Select all

; Vorlagen und Auswahlen aufrufen und einlesen
F8::
Auswahlfenster:
Auswahl := FileExist(AuswahlDatei) ? FileOpen(AuswahlDatei, "r").Read() : ""
If !(File := FileOpen(VorgabenDatei, "r")){
   MsgBox, 16, Fehler!, Die Datei %VorgabenDatei% konnte nicht geöffnet werden!
;   ExitApp
}
Vorgaben := StrSplit(File.Read(), "`n", "`r")
File.Close()

; Auswahlfenster erstellen und anzeigen
Rows := (L := Vorgaben.Length()) > 10 ? 10 : L
GuiText_1 := "Wählen Sie hier den Standard für das nächste Umbenennungsprojekt aus!"
Gui, Margin, 20, 20
Gui, Font, s10 , Verdana
Gui, Add, Text, xm w350, %GuiText_1%
Gui, Add, ListView, xm wp r%Rows% -Multi vBestandAuswahl Sort, Bestand|Signatur|Index
For Each, Vorgabe In Vorgaben
{
   Felder := StrSplit(Vorgabe, "`t")
   Option := (Felder[1] = Auswahl) ? "Focus Select" : ""
   LV_Add(Option, Felder*)
}
Loop, % LV_GetCount("Column")
   LV_ModifyCol(A_Index, "AutoHdr")

Gui, Add, Edit, cblue    xm  h25   w100  vAktSignEingabe, ;%Auswahl%
Gui, Add, Edit, cblue    x137  yp  h25  w70  vSignEingabe, ;%SignVorlage%
Gui, Add, Edit, cblue    x224  yp  h25  w70  vIndexEingabe, ;%IndexVorlage%
Gui, Add, Text, x124     yp+5    h25   w13 , % chr(863)
Gui, Add, Text, x211     yp+4    h25   w13  , % chr(862)

Gui, Add, Button, xm  h30 w100 Default gAnwenden, Anwenden
Gui, Add, Button, x145 yp h30 w100 gNeuerstellen, Neu Erstellen
Gui, Add, Button, x270 yp h30 w100 gAbbrechen, Abbrechen

Menu, Tray, Icon, , , 1
GuiControl, Focus, BestandAuswahl
Gui, Show, x100 y100, Signierungsvorlagen
Return

;------------------------------------------------------------------------
; Auswahl übernehmen
Anwenden:
If !(Row := LV_GetNext())
{
   MsgBox, 16, Fehler!, Bitte wählen Sie einen Bestand aus!
   GuiControl, Focus, BestandAuswahl
   Return
}
LV_GetText(AktSign, Row, 1)
LV_GetText(SignVorlage, Row, 2)
LV_GetText(IndexVorlage, Row, 3)
StellenSign := StrLen(SignVorlage)
If (IndexVorlage = "-")
{
   StellenIndex := 0
}
else
StellenIndex := StrLen(IndexVorlage)
LetzteSign := 0
If (AktSign <> Auswahl)
{
   Auswahl := AktSign
   File := FileOpen(AuswahlDatei, "w")
   File.Write(Auswahl)
   File.Close()
}
Gui, Destroy
Gosub, Anzeige
Menu, Tray, Icon, , , 0
Return
Und so sieht die Abfrage am Anfang solch einer Anwendung aus:

Code: Select all

If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
         Gosub Auswahlfenster
         ; Hierher sollte der Programmzeiger eigentlich wieder zurückkommen
      }
      else
      return
   }
   ; und hier sollte das Script weiterlaufen, wenn es von der Gui zurückgekommen ist
   .
   .
   return
  
Alleine ohne die externe Datei läuft das natürlich nicht, aber dieser Code kann Euch vielleicht Aufschluß geben, über den Zweck meiner Frage.
Da die Subroutine Auswahlfenster von verschiedenen Stellen aus aufgerufen werden soll und auch separat über F8, kann ich auch keinen Sprungbefehl mit einem einfachen Label einsetzen.
Wie umgehe ich das Dilemma?

Viele Grüße von Meister Lampe
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

09 Nov 2019, 04:36

Gut das Du uns daran erinnerst, daß es um Deine Fragen geht!
Hier ein funktionierendes Bsp.:

Code: Select all

gosub start
return
   
   
start:
AktSign:=""
gosub abfrage
return


abfrage:
gui, submit, noHide
If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
         Gosub Auswahlfenster
      else
      {
         msgbox, Keine Bestandsvorlage!, ohne gehts nicht weiter
         exitapp 
      }
   }
else
    gosub machweiter
return

F12::
Auswahlfenster:
Gui, GuiAuswahl:Add, edit,x20 y20 w100 vAktSign, %AktSign%
Gui, GuiAuswahl:Add, button,x140 y20 w50 gmachweiter, ok
Gui, GuiAuswahl:Show,,Abfragefenster
return

machweiter:
gui, GuiAuswahl:submit, noHide
gui,GuiAuswahl:destroy
if (AktSign ="")
{
   gosub abfrage
   return
}
msgbox, Aktenzeichen: %AktSign%
; und hier gehts weiter wenn ein Aktenzeichen existiert
return
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

09 Nov 2019, 04:55

Wenn man ein "normales" Programm startet, bekommst man ein evtl leeres Hauptfenster und dann lädst man das was man zB. bearbeiten will oder fängt an etwas zu machen.
Bei Dir scheint das anders zu sein. Wenn ich das richtig sehe, fragst du zuerst diverse Sachen nach, und startest dann dein HauptGUI (Anzeige?)? Verstehe ich das richtig?
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

09 Nov 2019, 09:36

Es gibt ein bewährtes 'Standardverfahren', mit dem man die 'verfrühte' Rückkehr nach Anzeige eines Fensters in einer Subroutine oder Funktion verhindern kann:

Code: Select all

; Vorlagen und Auswahlen aufrufen und einlesen
F8::
Auswahlfenster:
GuiText_1 := "Wählen Sie hier den Standard für das nächste Umbenennungsprojekt aus!"
Gui, Margin, 20, 20
Gui, Font, s10 , Verdana
Gui, Add, Text, xm w350, %GuiText_1%
Gui, Add, Edit, cblue    xm  h25   w100  vAktSignEingabe, ;%Auswahl%
Gui, Add, Edit, cblue    x137  yp  h25  w70  vSignEingabe, ;%SignVorlage%
Gui, Add, Edit, cblue    x224  yp  h25  w70  vIndexEingabe, ;%IndexVorlage%
Gui, Add, Text, x124     yp+5    h25   w13 , % chr(863)
Gui, Add, Text, x211     yp+4    h25   w13  , % chr(862)

Gui, Add, Button, xm  h30 w100 Default gAnwenden, Anwenden
Gui, Add, Button, x145 yp h30 w100 gNeuerstellen, Neu Erstellen
Gui, Add, Button, x270 yp h30 w100 gAbbrechen, Abbrechen

Menu, Tray, Icon, , , 1
Gui, Show, x100 y100, Signierungsvorlagen
Gui, +LastFound   ; <<<<<<<<<
WinWaitClose      ; <<<<<<<<<
MsgBox, %A_ThisLabel% wird beendet!
Return

;------------------------------------------------------------------------
; Auswahl übernehmen
Anwenden:
; was immer Du willst oder musst ...
MsgBox, %A_ThisLabel% wird beendet!
GoSub, GuiClose
Return

Neuerstellen:
; was immer Du willst oder musst ...
MsgBox, %A_ThisLabel% wird beendet!
GoSub, GuiClose ; falls das Fenster hier geschlossen werden soll
Return

Abbrechen:
GuiClose:
Gui, Destroy
Menu, Tray, Icon, , , 0
Return
Voraussetzung: Das Fenster muss immer dann, wenn die Verarbeitung beendet wird, per Gui, Destroy zerstört werden.

In Deinem speziellen Fall gibt es möglicherweide noch weitere Probleme:
  • Du solltest nach der Rückkehr aus Auswahlfenster: sicherstellen, dass auch wirklich eine Auswahl getroffen wurde.
  • Du solltest verhindern, dass das Fenster nach Aufruf über Auswahlfenster: per Hotkey F8 nochmals aufgebaut werden kann.
User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

14 Nov 2019, 17:26

Hallo just me!

Kann man auch für Labels Variablen einsetzen?
Wie Du weißt, besteht die Auswahlroutine bei mir aus mehreren Teilen, der eigentlichen Gui, der Listview, die sie mit den externen Daten füllt (die wird in Deinem Code übrigens gar nicht aufgerufen!), den anschließenden Aktionen (je nach Button Anwenden, Neuerstellen, Abbrechen) und der Anzeige, die die aktuelle Vorlage kurz zur Bestätigung oder zu Info anzeigt. Diese wird zum Abschluß der Auswahl ("Anwenden") oder nach dem Neuerstellen einer Vorlage eingeblendet. Wenn ich jetzt in diese am Schluß einen Befehl zum Rücksprung setzen könnte mit einer Adressvariablen, die ich vorher am Ursprungsort abgespeichert habe, dann würde es vielleicht gehen.
So könnte das etwa aussehen (das ist jetzt ein bischen Pseudo-Code, da ich nicht weiß, wie das genau realisiert würde):
in der laufenden Anwendung stünde

Code: Select all

^F6::
   If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
		Lb_Ruecksprung := Lb_Trimmen
         goto Auswahlfenster
		 ;Hier evtl ein Befehl zum Stoppen/Warten?
         Lb_Trimmen ;<<< Hierher käme der Programmzeiger wieder zurückgesprungen
      }
	  else
      return
   }
.
.
.
return
und im Modul "Anzeige"

Code: Select all

Anzeige:
If (AktSign = "")
{
   LeerAnzeige = Es ist keine Bestandsvorlage ausgewählt! 
   Progress, m2 fs12 zh0 ct0000ff CWffffff, %LeerAnzeige%, , Vorschau, Verdana
}
else
{
   VorschauSign := Format("{:0" . StellenSign . "}", 1)
   If (StellenIndex = "0")
   {
      VorschauMsg = %AktSign%_%VorschauSign%
   }
   else
   {
      VorschauIndex := Format("{:0" . StellenIndex . "}", 0)
      VorschauMsg = %AktSign%_%VorschauSign%-%VorschauIndex%
   }
   Progress, m2 fs12 zh0 ct0000ff CWffffff B, %VorschauMsg%, , Vorschau, Verdana
}
SetTimer, ProgressOff, 1500

Goto Lb_Ruecksprung (Variabler Labelname!)

Return

ProgressOff:
Progress, Off
Return
Meinst Du, die Sache ließe sich so realisieren? Die Option, sich die aktuelle Vorlage über Strg+F8 anzeigen zu lassen, müßte man natürlich auch etwas umschreiben.

Viele Grüße vo Meister Lampe
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

15 Nov 2019, 10:54

Moin Meister,

mein Beispiel ist ein Beispiel, nicht Dein fertiges Skript. Es soll nur zeigen, wie das grundsätzlich funktionieren kann. Die Teile, die das ListView-Control füllen, hast Du ja schon. Welche Verbindung fehlt Dir?

Man kann ein Rücksprunglabel auch in einer Variablen übergeben:

Code: Select all

Goto, %MeineVariableMitDemRücksprunglabel%
Ich weiß aber nicht, wozu das in diesem Fall gut sein soll.
User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

18 Nov 2019, 17:43

Hallo just me!

Ich werde meine zukünftigen Fragen und Antworten zu diesem Problem wieder in dem großen Thread "Optimierung Umbenennungstool" fortsetzen. Dort sind schließlich alle Scriptbeispiele und die Erklärungen dazu.
Ich hatte gedacht, daß ich das Problem hier relativ einfach unabhängig quasi "nebenbei" selber lösen könnte und eine kleine Anfrage genügen würde.

Viele Grüße von Meister Lampe
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

19 Nov 2019, 05:21

Fragen stellen finde ich ja prinzipiell gut, aber "Kann man auch für Labels Variablen einsetzen?". Nichts für ungut, aber kann man das nicht kurz mal ausprobieren? Oder in die Hilfe schauen? Als Tipp gemeint: Ich habe ständig irgendwelche kleine Test.ahks laufen, wie für Deinen Zweck z.B.:

Code: Select all

x:="test"
gosub %x%
return

test:
MsgBox, hallo test
return
:)
User avatar
Meister Lampe
Posts: 229
Joined: 06 Apr 2014, 13:28

Re: InputBox oder Gui zur Interaktion mit laufendem AHK-Script?

21 Nov 2019, 17:28

Hallo haichen!

Im Prinzip hast Du schon recht, und ich probiere ja auch viel selber aus. Ich habe oben zusammen mit meiner Frage einen Pseudocode geschrieben, wie ich mir die Sache vorstelle - und daß ich noch keine Vorstellung über die Umsetzung habe. 1. hatte ich unter Stichwort Label" nichts gefunden, 2. habe ich bisher nur Beispiele gefunden, in denen das Label am Anfang eines Scripts steht und die Anwendung startet - ich benötige aber eines für mittendrin und wußte nicht, ob es da einen Unterschied gibt. Deshalb hatte ich hier ja auch immer von "laufendem Script" gesprochen. 3. Wie ist die Syntax richtig? Kommt zwischen Sprungbefehl und Labelname jetzt ein Komma oder nicht? Oder ist das egal? Selbst hier im Thread geht das durcheinander. Gilt der Name dann als Variable oder als Zeichenkette? Du jedenfalls schreibst ihn in Deinem Beispiel in Anführungszeichen. Das habe ich auch versucht, nachdem es bei mir ohne nicht geklappt hat, aber das hat nichts genützt. Aber sowas steht halt nicht im Tutorial.

Viele Grüße von Meister Lampe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 99 guests