Ctrl + Capslock

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

alf4u
Posts: 7
Joined: 27 Mar 2022, 08:31

Ctrl + Capslock

Post by alf4u » 23 May 2022, 12:34

Ich bitte um Hilfe bei der Kombination der Tasten Strg/Ctrl und Capslock mit einer Zahl.

Ich habe ein Skript, welches mit folgenden Hotkeys aufgerufen wird:
CapsLock & 1::
CapsLock & 2::
.
.
If (GetKeyState("Ctrl", "P") or GetKeyState("Ctrl", "T"))
Mach was

Im Anschluss identifiziere ich die Zahl mit A_ThisHotkey und lese eine Zelle (die Zeilenummer entspricht der Zahl, die Spalte wird über die Strg-Taste festgelegt) aus einem Array aus.

Dieses Skript erkennt auf allen 3 getesteten PC's einwandfrei die Hotkeys <Capslock> + <Zahl> und die Hotkeys <Ctrl> + <Capslock> + <Zahl ausser 2>.
Auf einem PC wird der Hotkey <Ctrl> + <Capslock> + <2> nicht erkannt, auf den anderen beiden PC's schon.

Kann mir jemand sagen, woran dies liegt?
Und mir möglicherweise einen Workaround zeigen?

Vielen Dank

Rohwedder
Posts: 7551
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Ctrl + Capslock

Post by Rohwedder » 23 May 2022, 12:52

Hallo,
dieses : "Mach was … Im Anschluss identifiziere ich die Zahl mit A_ThisHotkey" könnte evtl. ein Grund sein.
https://ahkde.github.io/docs/Variables.htm#h
A_ThisHotkey ändert sich, wenn der aktuelle Thread von einem anderen Hotkey unterbrochen wird.
D.h. bereits vor "Mach was" die Zahl identifizieren.

alf4u
Posts: 7
Joined: 27 Mar 2022, 08:31

Re: Ctrl + Capslock

Post by alf4u » 23 May 2022, 15:46

Danke für den Hinweis.
Leider bewirkt er keine Änderung.
Bei "Mach was" weis' ich einer Variable einen Wert zu.

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

Re: Ctrl + Capslock

Post by BoBo » 23 May 2022, 23:30

Da du das Script nicht zeigst, lässt sich nicht/schlecht nachvollziehen was du wo geändert hast, und warum es trotzdem nicht funktioniert.
Ohne script ist's meh :yawn: Um einen workaround vorschlagen zu können muss man/frau wissen was final erreicht werden soll.

alf4u
Posts: 7
Joined: 27 Mar 2022, 08:31

Re: Ctrl + Capslock

Post by alf4u » 24 May 2022, 10:46

Da dasselbe Skript auf 2 PC's einwandfrei funktioniert und auf 1 PC nicht, vermute ich eine Wechselwirkung mit der Tastatur.
Auf allen PC's läuft Windows 10 Pro 21H2. An den beiden "funktionierenden" PC's sind Tastaturen von HP angeschlossen. An dem "nicht funktionieren" PC eine Microsoft Tastatur.
An allen PC's ist die gleiche Anzeigesprache Deutsch (Deutschland) eingestellt.

Im Anschluss noch das Teil-Skript.
Ich habe eine erweiterbare Mehrfach-Zwischenablage programmiert, welche sowohl reinen Text als auch Text mit Formatierung sowie Grafiken und Bilder aufnimmt und wiedergibt.
Die Mehrfach-Zwischenablage läßt sich sowohl über ein GUI als auch ausschließlich über Hotkeys bedienen.

Code: Select all

; Speicherinhalt der ersten 99 Positionen der Mehrfach-Zwischenablage direkt wiedergeben
; --------------------------------------------------------------------------------------
; Script Function - 'teildynamisches Hotkey':
; Der Speicherinhalt der ersten 99 Positionen des ZwischenablageArrays der Mehrfach-Zwischenablage
; soll ohne Aufruf des Graphischen Userinterfaces (Gui) direkt wiedergegeben werden.
; Die Tastenkombination
;     <CapsLock> und <Zahl von 1 bis 9>
;				gibt Plain-Text zurück.
;     <Strg> und <CapsLock> und <Zahl von 1 bis 9>
;				gibt 'Full Content' (Text mit oder ohne Formatierung, Bilder und Grafiken) zurück.
; Nach dem Loslassen dieser Tasten kann optional durch Eingabe einer weiteren <einstelligen Zahl>
; die gewünschte Speicherposition von 1 bis 99 gewählt werden.
; Die Wiedergabe erfolgt quasi als 'teildynamisches Hotkey'.

; Skriptaufruf für die "direkte Wiedergabe aus der Mehrfach-Zwischenablage" durch gleichzeitiges 
; Drücken der Tasten <Strg>, <CapsLock> und einer <einstelligen Zahl>, also dem eigentlichen Hotkey.
CapsLock & 1::
CapsLock & 2::
CapsLock & 3::
CapsLock & 4::
CapsLock & 5::
CapsLock & 6::
CapsLock & 7::
CapsLock & 8::
CapsLock & 9::

; Identifizieren des aufgerufenen Hotkeys
HotkeyNummer := SubStr(A_ThisHotkey, StrLen(A_ThisHotkey), 1)

; Wenn zugleich die <Strg> Taste (Steuerungstaste auch Control oder Ctrl) gedrückt ist
If GetKeyState("Ctrl", "P")
{
	Rueckgabewert := "Full Content"
}
else
{
	Rueckgabewert := "Plain-Text"
}

SpeicherPosition := ""

; Optionale Eingabe einer <zweiten einstelligen Zahl> nach der Eingabe des HotKeys
; Warten auf die Eingabe von maximal 1 Zeichen für 1 Sekunde
Input, SpeicherPosition, L1 T1 E

; Prüfen, ob es sich bei den eingegebenen Zeichen um eine Zahl zwischen 1 und 99 handelt
if SpeicherPosition is integer
{
	SpeicherPosition := SpeicherPosition + 10 * HotkeyNummer
}
else
{
	SpeicherPosition := HotkeyNummer
}

; Schließen eines eventuell, geöffneten Mehrfach-Zwischenablage-Fensters
SetTimer, ZwischenablageGUIAnzeigedauer, Off
WinClose, ahk_id %ZwischenablageGuiID%

; Schließen eines eventuell, geöffneten Info-Fensters der Mehrfach-Zwischenablage
SetTimer, ZwischenablageInfoGUIAnzeigedauer, Off
WinClose, ahk_id %ZwischenablageInfoGuiID%

; Prüfen, ob das ZwischenablageArray Daten enthält
if (ZwischenablageArray[SpeicherPosition, 1] != "")
{
	if (Rueckgabewert = "Full Content")
	{
		; Rückgabe von 'Full Content' (also mit Text mit Formatierung als auch Bilder und Grafiken)
		; Speichert die gesamte Zwischenablage in die Variable "ClipboardSicherung"
		ClipboardSicherung := ClipboardAll
		; Zuweisen der temporären Speicherdatei
		Dateiname := TempVerzeichnis . "Zwischenablagedatei." . SpeicherPosition
		FileRead, ClipBoard, *c %Dateiname%
		SendInput, ^v
		Sleep, 500
		; Originale Zwischenablage wiederherstellen
		Clipboard := ClipboardSicherung
	}
	else
	{
		; Rückgabe von Plain-Text
		Rueckgabewert := ZwischenablageArray[SpeicherPosition, 1]
		; Alle Zeichen, einschließlich ^+!#{}, werden als direkt geschriebener Text interpretiert 
		SendRaw, %Rueckgabewert%
	}	
	; Falls die Taste <CapsLock> noch aktiv ist, wird diese zwangsweise deaktiviert
	if (GetKeyState("CapsLock", "T") or GetKeyState("CapsLock", "P"))	
	{
		SetCapsLockState, AlwaysOff
	}
}
else
{
	; Die Subroutine "BelegtePositionenZwischenablageArray" öffnet eines MsgBox
	GoSub, BelegtePositionenZwischenablageArray
}

; Ende des Skript "Speicherinhalt der ersten 99 Positionen der Mehrfach-Zwischenablage direkt wiedergeben"
Return
[Mod edit: [code][/code] tags added.]

Der HotKey <Strg(Ctrl)>+<Capslock>+<2> (oder z.B. <Strg>+<Capslock>+<27>) liefert auf dem "nicht funktionieren" PC keinen Rückgabewert. Er sollte "Full Content" also Formatierung, Grafik und Bilder retournieren.
Alle anderen möglichen Kombinationen, also z.B. <Strg>+<Capslock>+<3> oder <Strg>+<Capslock>+<59> laufen einwandfrei!

Danke für die Hilfe
Last edited by gregster on 24 May 2022, 14:27, edited 1 time in total.
Reason: Bitte verwende Code-Tags, wenn du Code postest. Danke!!

alf4u
Posts: 7
Joined: 27 Mar 2022, 08:31

Re: Ctrl + Capslock

Post by alf4u » 31 May 2022, 14:28

Zur Probe habe ich den Hotkey <Strg>+<Capslock>+<Zahl> durch <Shift>+<Capslock>+<Zahl> ersetzt.
Mit dem Ergebnis, das auf dem PC mit der Microsoft-Tastatur nun das Skript korrekt funktioniert. Jedoch liefern die beiden PC's mit der HP-Tastatur nun bei Eingabe von <Shift>+<Capslock>+<2> keinen Rückgabewert.

Da ich keine Lösung finden konnte, habe ich schlussendlich den Hotkey <Alt>+<Capslock>+<Zahl> gewählt.
Dieser funktioniert auf allen (getesteten) PC's mit den unterschiedlichen Tastaturen.

Sollte jemand eine Erklärung oder gar Abhilfe für das oben beschrieben Verhalten haben, bitte ich um Mitteilung!
Danke

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

Re: Ctrl + Capslock

Post by BoBo » 31 May 2022, 15:40

Für drei PC's sicher overkill, doch lassen sich die keyboards nicht per skript identifizieren/zuordnen?

Post Reply

Return to “Ich brauche Hilfe”