In Visual Studio Express 2013 wurden beispielsweise viele der Formatierungsverknüpfungen in Ctrl+ "gefaltet" E. Um eine Auswahl zu kommentieren, würde man gedrückt halten Ctrl, schlagen E, schlagen Cund dann loslassen Ctrl.
Wenn ich solche Eingaben senden würde, würde ich schreiben
SendInput {Ctrl Down}ec{Ctrl Up}
Aber wie mache ich aus dieser Sequenz einen Hotkey? Ich habe es versucht
{Ctrl Down}EC{Ctrl Up}::
MsgBox, "Hello, world!"
Return
Dies führt jedoch natürlich zu einem Syntaxfehler:
autohotkey
Andrew Cheong
quelle
quelle
{Ctrl Down}EC{Ctrl Up}
keine Lösung, die ich ernsthaft versuchte. Ich habe viele andere Dinge ausprobiert (Sie können einige Beispiele in meiner Erklärung sehen), aber ich wollte nicht alles erklären, was ich versucht habe, und ich wollte auch keine Benutzer abschrecken, die mir helfen könnten, indem ich so aussehe, als hätte ich es bereits versucht fortgeschrittene Techniken. Ich hoffe es ist verständlich ...Antworten:
Endlich herausgefunden.
tl; dr
Durch
^e
ersten gewünschten Tastendruck ersetzen . Ersetzen Sie den3
zweiten gewünschten Tastendruck durch den ASCII-Index. Dies erzwingt, dass Ctrldurch beide Tastenanschläge gehalten wird, andernfalls wird abgebrochen.Zur Anpassung dies Shiftstatt Ctrl, dann würden Sie die ersetzen müssen
Ctrl
s, entfernen Sie dasM
, und machen Sie einen einfacheren Vergleich wieOutputVar = C
statt derAsc(OutputVar) = 3
. Nicht sicher , wie dies zu erweitern , umAlt
undWin
aber Sie könnten versuchen müssen ,L2
oder etwas ähnliches.Erläuterung
Input
schien ein naheliegender Ort zu sein, um anzufangen.Input
fordert AHK auf, auf Benutzereingaben zu warten, zDas Meldungsfeld über Trigger auf CtrlEdann C. Aber wir suchen CtrlC, also lassen Sie uns das beheben:
Jetzt haben wir ein Meldungsfeld auf drücken bekommen CtrlEdann CtrlC. Aber es gibt ein Problem damit: Das Meldungsfeld wird ausgelöst, selbst wenn ich zwischen den beiden Tastenanschlägen loslasse Ctrl . Wie erkennen wir also im Wesentlichen einen
{Ctrl Up}
Mid-Input? Sie können nicht nur am Eingang nachsehen -- oder können Sie nicht nur nach der Eingabe überprüfen -
- Sie können nicht einmal mit beidem davonkommen, denn egal was passiert, Sie werden die
{Ctrl Up}
Blockierung für die Eingabe verpassen .Dann habe ich mich in der Dokumentation
Hotkey
nach Inspiration umgesehen. Der benutzerdefinierte Kombinationsoperator&
schien vielversprechend. Aber leider,verursachte einen Kompilierungsfehler; Anscheinend dient das
&
nur zum Kombinieren von unveränderten Tastenanschlägen.Schließlich war es an
UP
, und dort habe ich endlich den Durchbruch geschafft. Ich habe Ctrl's neu definiert ,UP
um einen Umschalter zu setzen , der verhindert, dass das Meldungsfeld ausgelöst wird!Wenn ich jetzt drücke CtrlE, dann loslasse Ctrlund drücke CtrlC, passiert wie erwartet nichts!
Es gab noch eine letzte Sache zu beheben. Bei "Stornierung" (ein "gebrochener Akkord") wollte ich, dass alle Tastenanschläge wieder normal sind. Aber im obigen Code
Input
müsste der einen Tastenanschlag "essen", bevor er zurückkehrt, unabhängig von einem gebrochenen Akkord oder einem irrelevanten sekundären Tastenanschlag. Durch Hinzufügen einesElse
Falls wird das Problem behoben:Da haben Sie es also - "Akkorde" in AutoHotkey. (Obwohl ich das nicht gerade als "Akkord" bezeichnen würde. Eher wie eine Melodie mit einer Basslinie ;-)
@hippibruder weist großzügig darauf hin, dass ich das Definieren vermeiden kann,
$Ctrl::
indem~
ich$Ctrl UP::
nicht blockiere. Dies ermöglicht eine gewisse Vereinfachung! (Das endgültige Ergebnis finden Sie oben im Abschnitt tl; dr.)Eine Sache noch. Wenn Sie möglicherweise bei "Stornierung" (einem "gebrochenen Akkord") den ersten Tastendruck ausgeben möchten, dh CtrlE alleine, fügen Sie diesen einfach in den
Else
Block ein.und vergessen Sie nicht, den Hotkey in zu ändern
eine Endlosschleife zu vermeiden.
quelle
Ctrl
+Shift
+a
oder einen bestimmten Schlüssel zu verlinken ? Ich verstehe deine Logik in der Post nicht wirklich. Vielen Dank!Ctrl
+ eine Aktion zuweisen möchten,k
gefolgt vonCtrl
+,a
ohne die freizugebenCtrl
. Für so etwas wieCtrl
+Shift
+ wärea
natürlich die richtige Methode einfach^+a::
.AppsKey::
,Ctrl & AppsKey::
und^+AppsKey::
. Das 1. und 2. Werk, aber nicht das 3.AppsKey
technisch gesehen kein Modifikatorschlüssel ist. Werfen Sie einen Blick auf Ist es möglich, AppsKey oder andere Schlüssel als Modifikator zu verwenden, wenn Sie dies noch nicht getan haben. Viel Glück!Ich glaube nicht, dass es in AHK eine integrierte Unterstützung für Tastenakkorde gibt. Eine Möglichkeit, diese zu erkennen, besteht darin, einen Hotkey für die erste Taste im Akkord (^ e) zu registrieren und dann mit dem Eingabebefehl die nächsten Tasten zu erkennen.
quelle
_
, derErrorLevel
usw.), wäre ich bereit, es erneut zu versuchen und zu prüfen, ob Sie tatsächlich die überlegene Lösung haben, die ich akzeptieren sollte.~
! Vielen Dank. Ich brauche dasChordIsBroken
allerdings, weil ich sonstCtrl
zwischen den beiden Tastenanschlägen loslassen kann , was ich nicht zulassen möchte. Ich bin verblüfft darüber, warum Ihre Lösung bei mir nicht funktioniert. Ich denke, ich verwende AHK_L v1.1.09.00, also sollte ich vielleicht aktualisieren? Aber für mich führt das Drücken Ihres Skripts derzeit dazu,Ctrl+E
dass eine Zeile (in einem Texteditor) gelöscht wird.Ctrl+E
. Mir ist gerade klar geworden, dass du überhaupt nichts zulassen willst{Ctrl Up}
. Meins ahmt das VS-Verhalten nach. ({Ctrl Down}e{Ctrl Up}{Ctrl Down}c{Ctrl Up}
ist legitim)