▌はじめに
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プログラムをコンパイルし、結果の実行可能ファイルへのリンクをスタートアップフォルダーに配置することです。
もちろん、他のプログラミング言語や他のオペレーティングシステムでも同様のメカニズムを実装できますが、ここにはロケット科学はありません。
この方法にはいくつかの重要な肯定的な性質があります。
- 多くの人にとって馴染みのあるオプションとして、CapsLockを1回クリックするだけでレイアウトを切り替えます。
- カプセルの有用性が時々あるため、カプセルの直接的な機能は維持されます。
- イデオロギー的にこのアプローチが気に入らない場合は、単に使用することはできません。 そして、他の誰かがそれを使用し、あなたが彼の職場で働くことを余儀なくされた場合、ワンクリックでスクリプトの実行を停止し、快適な環境で仕事を続けます。
- 標準のホットキーを再割り当てするのではなく、全員がこの方法を使用する場合は、誰かの職場に座って、スクリプトの実行中のバージョンをオフにして、オプションa)のように標準の使い慣れたホットキーを取得するか、スクリプトのバージョンを実行してあなたに最適化されています。