Copy&Paste to daMax

Mittwoch, 7.9.2016, 12:45 > daMax

daMaxCopyPaste128pxIch verwende seit ungefähr 100 Jahren das Programm TapTap, mit dem ich mir die für Linkshänder so unmöglich zu bedienenden Tastaturkürzel STRG+C und STRG+V auf die Tastenkürzel DoppelRechtsShift und DoppelRechtsStrg umgebogen habe.

Leider funktioniert TapTap unter Win7 64bit immer unzuverlässiger. Erst reagierte der Windows Explorer nicht mehr auf die neuen Tastenkürzel, dann Notepad und seit neuestem wollte auch Firefox nicht mehr.

Eine entsprechende Forendiskussion warf die Frage auf, ob man ein solches Verhalten nicht auch per AutoHotKey hinbekommen könnte. Die Antwort lautet: yes, we can.

Erst hatte ich ein eigenes kleines AHK-Script zusammengefrickelt, das leider nicht taugte, weil es zwar das Double-Tap-Verhalten abbildete, dabei aber effektiv die reguläre Verwendung der rechten Shift- und Strg-Taste verhinderte. und so ganz ohne großbuchstaben, anführungs- und ausrufezeichen ist das leben auch irgendwie doof111

Zum Glück das Internet ist bekanntlich groß und dabei voller Nerds, so stieß ich nach einiger Guhgeley auf das AHK-Script RapidHotkey, das eine Lösung für mein Problem darstellt, wenn es auch der totale Overkill ist. Erweitert um 2 Zeilen habe ich jetzt wieder das was ich brauche.

Nach etwas Rumfrickelei mit dem AHK-Compiler hat das Ding jetzt auch ein eigenes Icon und nett wie ich bin, stelle ich euch das fertige Script und die daraus entstandene EXE zur Verfügung (unter GNU General Public License).

AHK Script: CopyPasteRapidHotkey.ahk
Ausführbares Programm: CopyPasteRapidHotkey.zip

Verwendung:
CopyPasteRapidHotkey.zip entpacken und die darin enthaltene CopyPasteRapidHotkey.exe doppelklicken. Nun kopiert ein "Doppelklick" der rechten Shift-Taste Dinge in die Zwischenablage, ein "Doppelklick" auf die rechte STRG-Taste fügt die Zwischenablage wieder ein. Wer will, erstellt sich eine entsprechende Verknüpfung im AutoStart-Menü.

Disclaimer: AutoHotKey kommt von AutoHotkey Foundation LLC und steht unter GNU General Public License, RapidHotkey wurde von HotKeyIt entwickelt, alle Credits gehen an ihn und Laszlo für Morse().

Und der Vollständigkeit halber noch der vollständige Code:

; thanks to https://autohotkey.com/board/topic/35566-rapidhotkey/

~RShift::RapidHotkey("^c", 2, 0.1) ;COPY
~RControl::RapidHotkey("^v", 2, 0.1) ;PASTE

RapidHotkey(keystroke, times="2", delay=0.2, IsLabel=0)
{
Pattern := Morse(delay*1000)
If (StrLen(Pattern) < 2 and Chr(Asc(times)) != "1") Return If (times = "" and InStr(keystroke, """")) { Loop, Parse, keystroke,"" If (StrLen(Pattern) = A_Index+1) continue := A_Index, times := StrLen(Pattern) } Else if (RegExMatch(times, "^\d+$") and InStr(keystroke, """")) { Loop, Parse, keystroke,"" If (StrLen(Pattern) = A_Index+times-1) times := StrLen(Pattern), continue := A_Index } Else if InStr(times, """") { Loop, Parse, times,"" If (StrLen(Pattern) = A_LoopField) continue := A_Index, times := A_LoopField } Else if (times = "") continue := 1, times := 2 Else if (times = StrLen(Pattern)) continue = 1 If !continue Return Loop, Parse, keystroke,"" If (continue = A_Index) keystr := A_LoopField Loop, Parse, IsLabel,"" If (continue = A_Index) IsLabel := A_LoopField hotkey := RegExReplace(A_ThisHotkey, "[\*\~\$\#\+\!\^]") IfInString, hotkey, %A_Space% StringTrimLeft, hotkey,hotkey,% InStr(hotkey,A_Space,1,0) backspace := "{BS " times "}" keywait = Ctrl|Alt|Shift|LWin|RWin Loop, Parse, keywait, | KeyWait, %A_LoopField% If ((!IsLabel or (IsLabel and IsLabel(keystr))) and InStr(A_ThisHotkey, "~") and !RegExMatch(A_ThisHotkey , "i)\^[^\!\d]|![^\d]|#|Control|Ctrl|LCtrl|RCtrl|Shift|RShift|LShift|RWin|LWin|Alt|LAlt|RAlt|Escape|BackSpace|F\d\d?|" . "Insert|Esc|Escape|BS|Delete|Home|End|PgDn|PgUp|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|AppsKey|" . "PrintScreen|CtrlDown|Pause|Break|Help|Sleep|Browser_Back|Browser_Forward|Browser_Refresh|Browser_Stop|" . "Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|MButton|RButton|LButton|" . "Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2")) Send % backspace If (WinExist("AHK_class #32768") and hotkey = "RButton") WinClose, AHK_class #32768 If !IsLabel Send % keystr else if IsLabel(keystr) Gosub, %keystr% Return } Morse(timeout = 400) { ;by Laszo -> http://www.autohotkey.com/forum/viewtopic.php?t=16951 (Modified to return: KeyWait %key%, T%tout%)
tout := timeout/1000
key := RegExReplace(A_ThisHotKey,"[\*\~\$\#\+\!\^]")
IfInString, key, %A_Space%
StringTrimLeft, key, key,% InStr(key,A_Space,1,0)
If Key in Shift,Win,Ctrl,Alt
key1:="{L" key "}{R" key "}"
Loop {
t := A_TickCount
KeyWait %key%, T%tout%
Pattern .= A_TickCount-t > timeout
If(ErrorLevel)
Return Pattern
If key in Capslock,LButton,RButton,MButton,ScrollLock,CapsLock,NumLock
KeyWait,%key%,T%tout% D
else if Asc(A_ThisHotkey)=36
KeyWait,%key%,T%tout% D
else
Input,pressed,T%tout% L1 V,{%key%}%key1%
If (ErrorLevel="Timeout" or ErrorLevel=1)
Return Pattern
else if (ErrorLevel="Max")
Return
}
}