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
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]; 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[/code]
[color=#FF0040][size=75][Mod edit: [kbd][code][/code][/kbd] tags added.][/size][/color]
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