Probleme mit A_PriorKey und globalen Variablen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Johasch
Posts: 3
Joined: 28 Jun 2022, 02:27

Probleme mit A_PriorKey und globalen Variablen

Post by Johasch » 28 Jun 2022, 05:08

Hallo,
ich versuche ein Script zu schreiben mit dem ich z.B. die Tastenkombination "(1)" in das Symbol ① umwandeln kann.
Dazu verwende ich folgenden code:

Code: Select all

#InstallKeybdHook 


global flag := "" 

; ----------------------------------------------------------
; Kombinationen mehrerer Tasten
; ---------------------------------------------------------- 

$1::      ; $ verhindert, das die Taste sich selbst aufruft
  global flag
   if (A_PriorKey = "(") {
     flag := "(1"
   } else {
     flag := "1"
	 }
   send 1
 return  
 $)::     
   global flag
   if (flag = "(1") {
     send {Backspace}
    send {Backspace}
     send {U+2460}  ; ①
   } else {
     send )
   }
 return  
Beim Austesten stelle ich fest, das A_PriorKey nur "8" liefert. Wie kann ich feststellen, ob es nun "8" oder "(" war?
Zudem bin ich mir nicht sicher, ob die Anwendung der globalen Variable korrekt ist.
Bin für jeden Hinweis dankbar.


[Moderator action: Moved topic from main (English) forum]

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Probleme mit A_PriorKey und globalen Variablen

Post by BoBo » 28 Jun 2022, 10:32

Wie kann ich feststellen, ob es nun "8" oder "(" war?
Bei Deutscher Tastaturbelegung drücke ich, um die "öffnende" Klammer zu erhalten auf Shift-/Hochstell-Taste.
Ich erhalte damit via :arrow: A_PriorHotkey entweder LShift bzw. RShift als "vorherige" Taste.
Demnach sollte es die öffnende Klammer sein.

Was spricht eigentlich gegen A_ThisHotkey?

Code: Select all

#SingleInstance, Force

~(::  ToolTip % SubStr(A_ThisHotkey,2)
~8::  ToolTip % SubStr(A_ThisHotkey,2)
F12:: ToolTip

; 8(8(

gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Probleme mit A_PriorKey und globalen Variablen

Post by gregster » 28 Jun 2022, 10:37

Wieso keinen Hotstring? Die beruhen auf Zeichen, nicht gedrückten Tasten:

Code: Select all

:*?:(1)::{U+2460}

PS: global ist im Code oben überflüssig. Außerhalb von Funktionen, die wir hier gar nicht haben, sind alle Variablen global.

Johasch
Posts: 3
Joined: 28 Jun 2022, 02:27

Re: Probleme mit A_PriorKey und globalen Variablen

Post by Johasch » 29 Jun 2022, 00:56

Hallo,
danke für die Antworten. Hatte stundenlang in den verschiedensten Foren und auch in der Hilfe nach einer Lösung gesucht - aber offensichtlich die passenden Stellen überlesen bzw. nicht wirklich verstanden.
Werde mich noch ein bischen näher mit A_PriorHotkey und A_ThisHotkey beschäftigen, um ihren Gebrauch besser zu verstehen.

Die Lösung mit den Hotstrings ist für meinen Bedarf super. Allerdings habe ich festgestellt das ::>-::{U+1234) nicht funktioniert. Offensichtlich kommt der Hotstring nicht mit dem Minuszeichen zurecht. Wie kann ich das lösen?

gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Probleme mit A_PriorKey und globalen Variablen

Post by gregster » 29 Jun 2022, 06:53

Johasch wrote:
29 Jun 2022, 00:56
Die Lösung mit den Hotstrings ist für meinen Bedarf super. Allerdings habe ich festgestellt das ::>-::{U+1234) nicht funktioniert. Offensichtlich kommt der Hotstring nicht mit dem Minuszeichen zurecht. Wie kann ich das lösen?
Funktioniert hier, ich bekomme mit ::>-::{U+1234) dies hier: , irgendein äthiopisches Silbenzeichen, aber offenbar das richtige Symbol für diesen Code. Aber ich muss mich außerhalb eines Wortes befinden und einen Endcharakter tippen, wie z. B. Leertaste, da keine zusätzlichen Optionen gewählt wurden, wie * oder ?.


Schließlich musst du bei diesem Zeichen dein Skript bestimmt in UTF8 mit BOM-Kodierung (UTF8 mit byte order mark) speichern. Das kann man im Editor einstellen, sogar in Notepad - dort im 'Speichern'-Dialog. In anderen Editoren kann sich die Einstellung anderswo verstecken. Außerhalb sollltest du die Unicode-Version von autohotkey.exe verwenden, nicht die ANSI-Version.

hotstring.png
hotstring.png (3.94 KiB) Viewed 545 times
:arrow: Ohne die ?-Option funktioniert der Hotstring nicht innerhalb von Wörtern, das soll so sein.


Edit: Ich sehe allerdings ein potenzielles Problem, wenn ich die *-Option hinzufüge. Dann wird offenbar nur auto-ersetzt, anstatt dass {U+1234) in umgewandelt wird. (Version 1.1.34.03) Das muss ich mir mal genauer ansehen. Könnte ein Bug sein... Edit: hmm, ein Minuzeichen ist auch ein Standard-Endcharakter für einen Hotstring - dachte, es liegt daran, aber offenbar nicht.

Edit 2: Mit einer AHK-Unicode-Version (hier v1.1.34.03 Unicode 64 Bit) und UTF8 mit BOM Kodierung sollte allerdings auch das hier funktionieren (ggf noch mit Text-Option); das wird sogar empfohlen ggü. der {U+xxxx}-Methode:

Code: Select all

::>-::ሴ			; oder  :T:>-::ሴ
oder auch mit Optionen (kein Endcharakter notwendig; funktioniert auch innerhalb von Worten)

Code: Select all

:?*:>-::ሴ		; oder  :T?*:>-::ሴ
Bitte gib deine AHK-Version an, wenn du berichtest, was funktioniert und was nicht. Bei den Hotstrings gab es schon mal die ein oder andere Änderung bzw. diverse Bugfixes.
Bitte sag uns auch, wo und wie genau du die Hotstrings einsetzt, und welche Varianten und Optionen du verwendest. Danke!
Last edited by gregster on 29 Jun 2022, 07:42, edited 3 times in total.

Johasch
Posts: 3
Joined: 28 Jun 2022, 02:27

Re: Probleme mit A_PriorKey und globalen Variablen

Post by Johasch » 30 Jun 2022, 01:36

Hallo,
habe versucht die Hotkeys auf zwei verschiedenen Komputer umzusetzten. Bei beiden Systemen habe ich die aktuellste AHK-Version installiert. Einer der Komputer läuft mit Windows 11, der andere mit Windows 10.
Auf dem Windows 11 Komputer hat die Umwandlung von ::->:: funktioniert, auf dem Windows 10 System nicht. Ist es möglich, dass hier vom Betriebssystem etwas anders abläuft?
Habe dabei auch die verschiedenen Varianten ausprobiert, die du oben vorgezeigt hast, also :?*:>-::, :T:>-:: und ::>-::

Wie dem auch sei - ich werde in diesem Fall die Umwandlungen derzeit immer mittels A_PriorKey machen, wie im folgenden Beispiel mit +- . Da bin ich auf der sicheren Seite.

Code: Select all

$-::     
   if (A_PriorKey = "+") {
     send {Backspace}
     send {U+00B1}
   } else {
    send -
   }
 return

gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Probleme mit A_PriorKey und globalen Variablen

Post by gregster » 30 Jun 2022, 08:41

Ich benutze Win10, dort funktioniert es. Hast du die Skripte wirklich in beiden Fällen in UTF8 mt BOM-Kodierung abgespeichert, und die selbe AHK-Variante benutzt (nämlich Unicode, nicht ANSI - für jede v1-Version gibt es diese drei Varianten: 32bit ANSI, 32bit Unicode und 64bit Unicode ) ?

Post Reply

Return to “Ich brauche Hilfe”