追加の修飾子としてのCapsLock

はじめに



Ctrl-F4を押してVisualStudioのタブを閉じるのは不便でした。この機能をインターネットブラウザーやその他のCtrl-Wプログラムの標準に再割り当てしようとしましたが、困難に直面し、より柔軟なソリューションを見つけることにしました。



ハブにはCaps Lock専用の記事が既にあります。おそらく、最も標準的なオプションは、レイアウトを切り替えるための使用です。 より柔軟で、同時にかなりシンプルなアプローチを示したいと思います。



アイデア



そして、CapsLockがShift / Ctrl / Altより悪いのはなぜですか? 同じように使ってみませんか? したがって、アイデアは次のとおりです。これらの2つのイベントの間隔でキャップの押下/リリースを追跡し、他のキーを押すプログラムを作成し、その結果に基づいてアクションを実行します。



▌AutoIt



AutoItは、Windowsでタスクを自動化するためのフリーウェアスクリプト言語です。 作業を開始するには、 AutoIt Full Installationをダウンロードし、パッケージに含まれているSciTEエディターの切り捨てバージョンをインストールして実行します。



ソースコード



ワンピースでコメントなし
#include <Misc.au3> Global $isSingleCaps = True HotKeySet("{LAUNCH_MAIL}", "HoldModifier") While 1 Sleep(60000) WEnd Func HoldModifier() $isSingleCaps = True If _IsPressed("B4") Then HotKeySet("w", "CloseTab") HotKeySet("t", "RunAllTests") HotKeySet("]", "RestartExplorer") HotKeySet("a", "Play") HotKeySet("{NUMPADSUB}", "VolumeUp") HotKeySet("0", "RealCaps") While _IsPressed("B4") sleep(0) WEnd Unset() EndIf If $isSingleCaps Then Send("!+9") EndIf EndFunc Func Unset() HotKeySet("w") HotKeySet("t") HotKeySet("]") HotKeySet("a") HotKeySet("{NUMPADSUB}") HotKeySet("0") EndFunc Func CloseTab() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Microsoft Visual Studio", 1, -1) Then Send("^{F4}") Else Send("^{w}") EndIf EndFunc Func RunAllTests() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Microsoft Visual Studio", 1, -1) Then Send("^u") Send("^l") EndIf EndFunc Func RestartExplorer() $isSingleCaps = False ShellExecute("taskkill", "/im explorer.exe /f") ProcessWaitClose("explorer.exe") Run("C:\Windows\explorer.exe") EndFunc Func VolumeUp() $isSingleCaps = False Send("{VOLUME_UP 3}") EndFunc Func Play() Unset() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Total Commander", 1, -1) Then Send("{RIGHT}") Send("+{RIGHT}") Send("aimp3.exe /add_play ") Send("{BACKSPACE}") Send("^p") Send("{ENTER}") Send("{ENTER}") Send("{LEFT}") EndIf EndFunc Func RealCaps() Unset() $isSingleCaps = False $var = InputBox("To UpperCase", "     UpperCase") Send(StringUpper($var)) EndFunc
      
      









 #include <Misc.au3> ;  Misc.au3   _IsPressed,     Global $isSingleCaps = True ;        HotKeySet("{LAUNCH_MAIL}", "HoldModifier") ;     ,       While 1 Sleep(60000) ; " " WEnd
      
      







HotKeySet関数は特定のキーセットのみを受け入れ、特別な方法でCapsLock / NumLock / ScrollLockトグルキーを処理するため、単純化するために、レジストリを介してCapsLockを{LAUNCH_MAIL}に再割り当てします( SharpKeysは、実際には再割り当てのためのグラフィカルインターフェイスですレジストリを介したキー)。 HotKeySetにはさらに高度なバージョンがありますが、例を複雑にしませんでした。



無限ループは、AutoItの「イベント駆動型実行モデル」の例を示しています。ホットキーに割り当てられた関数が呼び出されると、「ペイロード」の実行は一時停止され、関数の終了後に続行されます。 後で別のオプションを示します。



 Func HoldModifier() $isSingleCaps = True If _IsPressed("B4") Then ; _IsPressed            HotKeySet("w", "CloseTab") ;    ,      HotKeySet("t", "RunAllTests") HotKeySet("]", "RestartExplorer") HotKeySet("a", "Play") HotKeySet("{NUMPADSUB}", "VolumeUp") HotKeySet("0", "RealCaps") While _IsPressed("B4") ;    sleep(0) WEnd Unset() EndIf If $isSingleCaps Then ;  $isSingleCaps   , ,          Send("!+9") ; "!" - Alt, "+" - Shift,  Alt+Shift+9           EndIf EndFunc Func Unset() HotKeySet("w") ; HotKeySet        HotKeySet("t") HotKeySet("]") HotKeySet("a") HotKeySet("{NUMPADSUB}") HotKeySet("0") EndFunc
      
      







これでCapsLockを使用する基本的なロジックが終わりました。これは、AutoItでできることの例を示したものです。



VSでタブを閉じる:



 Func CloseTab() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Microsoft Visual Studio", 1, -1) Then ;    Send("^{F4}") Else Send("^{w}") ;         Caps+W EndIf EndFunc
      
      







すべてのテストを実行します。



 Func RunAllTests() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Microsoft Visual Studio", 1, -1) Then Send("^u") Send("^l") EndIf EndFunc
      
      







エクスプローラープロセスの再起動(Win8アクティベーションサーバーが実行されるまで支援):



 Func RestartExplorer() $isSingleCaps = False ShellExecute("taskkill", "/im explorer.exe /f") ProcessWaitClose("explorer.exe") Run("C:\Windows\explorer.exe") EndFunc
      
      







8番目のWindowsで、マルチメディアキーを使用して音量を変更する手順を変更する方法を見つけられなかったため、次のようにしました。



 Func VolumeUp() $isSingleCaps = False Send("{VOLUME_UP 3}") ;  {VOLUME_UP}   EndFunc
      
      







TotalCommanderでカーソルが置かれているフォルダーをAIMPで再生するために送信します(Ctrl + P-現在のフォルダーへのパスをコマンドラインに送信します。カーソルの下のフォルダーへのパスを送信する方法が見つかりませんでした。 PowerUser、重要な場合)):



 Func Play() Unset() $isSingleCaps = False If StringInStr(WinGetTitle("[active]"), "Total Commander", 1, -1) Then Send("{RIGHT}") ;    Send("+{RIGHT}") ;       Send("aimp3.exe /add_play ") ;        Send("{BACKSPACE}") ;  /   Send("^p") ;      Send("{ENTER}") Send("{ENTER}") Send("{LEFT}") ;     EndIf EndFunc
      
      







CapsLock機能はそのままです。



 Func RealCaps() Unset() $isSingleCaps = False $var = InputBox("To UpperCase", "     UpperCase") Send(StringUpper($var)) EndFunc
      
      







別の実行モデル



一般的に、次のようになります。



 While 1 If _IsPressed("B4") Then ... EndIf Sleep(50) WEnd
      
      







少し多くのリソースが必要ですが、仮想コードを使用できます。



結論



最後の手順は、Ctrl + F7プログラムをコンパイルし、結果の実行可能ファイルへのリンクをスタートアップフォルダーに配置することです。



もちろん、他のプログラミング言語や他のオペレーティングシステムでも同様のメカニズムを実装できますが、ここにはロケット科学はありません。



この方法にはいくつかの重要な肯定的な性質があります。






All Articles