Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Tastenkürzel mittels AHK mit einer Taste belegen, wie?



  • Please log in to reply
2 replies to this topic
katrin
  • Members
  • 25 posts
  • Last active: Sep 08 2014 05:29 PM
  • Joined: 15 Nov 2012

Guten Tag

 

Es gibt ein Skript, dass ich schon sehr lange suche aber ich bekomme es einfach nicht hin, wobei es eigentlich nach einem sehr einfachen Skript aussieht.

 

Und zwar möchte ich, wie im Titel beschrieben, mit AutoHotkey, durch ein Tastenkürzel, das Drücken einer Taste auslösen. Ich will also eine Tastenkombination wie eine normale Taste benutzen können, d.h. die durch die Tastenkombination ausgelöste Taste, soll auch so lange gedrückt gehalten werden, wie das Tastenkürzel gedrückt wird.

 

Skripttechnisch ist mir da als erstes das hier eingefallen:

 

^!+5::a

Aber leider funktioniert das nicht wie ich es mir vorstelle.

Ich habe über die Monate, in denen ich schon versucht habe das Skript zum laufen zu bekommen, dann auch noch viele um einiges komplexere Skripte ausprobiert, aber keines führt zum gewünschten Ergebnis.

 

Das Ergebnis ist immer, dass die gewünschte Taste, in diesem Beispiel die Taste {a}, zwar gesendet wird aber vorher werden immer noch, die Modifikatortasten gesendet. Also in diesem Beispiel wird, statt dass nur die Taste {a} gesendet wird, hintereinander {Ctrl}, {Alt}, {Shift}, {a} gesendet.

 

Ich möchte aber das die Tasten {Ctrl}, {Alt}, {Shift} nur von AutoHotkey zum Start des Tastenkürzel erkannt werden und nicht an andere Programme weitergeleitet werden, sondern aus deren Sicht unterdrückt werden, genau wie dies ja auch bei der Taste {5} funktioniert, denn diese wird ja aus Sicht der anderen Programme unterdrückt, sonst würde ja {Ctrl}, {Alt}, {Shift}, {5}, {a} gesendet werden.

 

Welche Tasten wirklich gesendet werden teste ich immer mit dem Programm PassMark KeyboardTest, da man dort darüber ein gutes Feedback bekommt, jedes andere Programm registriert aber die gleichen Tasten.

 

 

Der Hintergrund des Ganzen ist, dass ich eine Maus mit vielen zusätzlichen Tasten besitze, die ich alle intensiv nutze, während ich meine Tastatur, nur wenn es gar nicht anders geht, alle paar Tage mal aus meinem Schrank hole, normalerweise steuere ich meinen PC ausschließlich mit meiner Maus und mittels Sprachsteuerung (Dragon NaturallySpeaking).

 

Und deshalb habe ein Skript geschrieben, was jeder der zusätzlichen Maustasten, mehrere verschiedene Funktionen zuweist, je nachdem welches Programm gerade aktiv ist.

Und das funktioniert in den meisten Fällen auch sehr gut, wobei ich die zusätzlichen Tasten vom Maustreiber her mit {F6}, {F10}, {F11}, {F12} und die restlichen zusätzlichen Maustasten mit Tastenkürzeln wie dem oben genannten (^!+5) belegt habe, die je nach Programm ganz spezifische Funktionenen auslösen (meine Maus hat 11 zusätzliche Tasten).

 

Am liebsten würde ich alle Tasten vom Maustreiber her mit Tastenkürzeln belegen, da ich diese dann mithilfe von Autohotkey (abgesehen von den hier beschriebenen Problemen), wirklich wie zusätzliche Tasten benutzen könnte aber das geht aufgrund des oben beschriebenen Problems nicht.

 

Denn zum Beispiel im normalen Windows Betrieb, nutze ich jeweils eine Maustaste, als Ersatz für die Tasten {Enter}, {Ctrl}, {Alt}, {Shift} und genau dafür musste ich vier der zusätzlichen Maustasten mit {F6}, {F10}, {F11}, {F12} belegen, so dass ich diese dann per Skript:

 

F11::LShift
F12::LCtrl
F10::LAlt
F6::Enter

 

im normalen Windows Betrieb, wie die Tasten {Enter}, {Ctrl}, {Alt}, {Shift} benutzen kann.

Wohingegen dieses Beispiel:

 

^!+5::Lshift

 

leider nicht funktionieren würde, da ich so die Taste {Shift} nicht gedrückt halten könnte, und somit zum Beispiel keine Texte markieren könnte.

 

 

Man könnte meinen, dass meine Variante mit den Funktionstasten (F6 …), die Lösung des Problems ist aber leider werden durch diese Variante auch Probleme verursacht, denn in allen Programm in denen diese Variante aktiv ist, funktionieren die jeweils unbelegten Tastaturtasten nicht, weshalb ich dann in diesen Programmen unter anderem keine Funktionen nutzen kann, die auf eine diese Tastaturtasten zurückgreifen.

 

 

So ich denke, damit habe ich das Problem fürs erste ausführlich genug beschrieben und hoffe es gibt hier jemanden dem eine Lösung dafür einfällt.

 

 

Liebe Grüße Katrin



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Das ganze war hier glaub ich schon öfter, die Befehle die du suchst sind für Hotkeys:

UP

Das Wort UP kann nach dem Namen eines Hotkeys erfolgen, um den Hotkey beim Loslassen anstatt beim Drücken auszuführen. Im folgenden Beispiel wird die linke Win-Taste mit der linken Strg-Taste neu belegt:

SendInput in der dt. Ahk hilfe mit den Befehl

{Blind}

Wenn {Blind} das erste Element im String ist, dann verhindert das Programm, dass Alt/Strg/Umschalt/Win losgelassen werden, wenn sie anfänglich gedrückt werden. Zum Beispiel sendet +s::Send {Blind}abc den String ABC und nicht abc, weil der Benutzer die Umschalt-Taste gedrückt hält.

 

Und

In der Hilfe zu send steht auch was über das gedrückt halten von Tasten.

 

a::SendInput,{Blind}{a Down}
a Up::SendInput,{Blind}{a Up}

So sollte das ganze dann am Ende aussehen.


Visit the new forum ahkscript.org.

http://ahkscript.org


katrin
  • Members
  • 25 posts
  • Last active: Sep 08 2014 05:29 PM
  • Joined: 15 Nov 2012
✓  Best Answer

Hallo allerseits

 

@nnnik

 

Ist ganz nett, dieser {Blind} Befehl, kann man bestimmt mal brauchen, Danke.

Aber was hat dieser Befehl mit dem oben beschriebenen Problem zu tun?

 

 

 

Unabhängig davon, hast du recht, wir hatten so einen Thread schon mal hier (bzw. im alten Forum), ich hatte schon so eine Art Déjà-vu, während ich den obigen Text geschrieben habe, daraufhin habe ich im alten Forum nochmal nachgesehen und tatsächlich habe ich vor einigen Monaten schon mal ein Thread zu dem Thema erstellt.

 

Siehe hier:

 

http://www.autohotke...f7d3763eec3f9b9

 

 

Und nach der nochmaligen Lektüre meines alten Threads, bin ich dann nun doch noch zu einer leichten Lösung gekommen, mithilfe der Idee von Brutosozialprodukt, die Maustasten vom Treiber her mit Tasten zu belegen, die es auf einer normalen Tastatur gar nicht gibt.

Auch wenn mir seine Idee damals nicht weitergeholfen hat, da dies bei meiner alten Maus nicht möglich war, wie auf Screen zu sehen ist.

 

Aber der Treiber meinem neuen Maus funktioniert da etwas anders, dort gibt es die Möglichkeit, einen Tastenanschlag von der Tastatur zu speichern, um diese Taste dann einer der zusätzlichen Maustasten zuzuweisen.

 

Als ich mir das noch einmal kurz durch den Kopf gehen ließ und nach ein paar Minuten googeln, bin ich auf folgende Seite gestoßen:

 

http://ragnar-f.gith...ocs/KeyList.htm

 

Dort habe ich gelesen das Windows nicht nur die Funktionstasten F1 bis F12 kennt, sondern bis zur Taste F24, worauf ich für jede zusätzliche Maustaste ein Skript nach dem Muster:

 

 

a::F13 

 

 

geschrieben habe, wodurch ich dann mittels der Taste “a“ an den Maustreiber die simulierten höheren Funktionstasten senden konnte, und dieser konnte so diese höheren Funktionstasten den zusätzlichen Maustasten zuweisen.

 

So, nun waren die Funktionstasten also doch noch die Lösung, nun eben nicht die normalen Funktionstasten^^

 

Viele Grüße Katrin