# ホットキーの種別

ホットキーの種別として以下の3つを選択できる

1. `アクティブ時のみ有効`

2. `アクティブ時のみ有効(SandS)`

3. `常駐時いつでも有効`

`アクティブ時のみ有効`と`アクティブ時のみ有効(SandS)`は入力画面が表示されているときだけ機能する。
一方、`常駐時いつでも有効`は入力画面が表示されていないときでも機能する。

## SandSについて

`アクティブ時のみ有効(SandS)`の`SandS`は「Space and Shift」の略で、単体でキーを押したときは文字キー(→Space)として機能し、
他のキーと同時押ししたときは修飾キー(→Shift)として機能する、という概念のこと

ランチャー呼び出しキーの修飾キーと`SandS`の修飾キーを同じキーとして設定することにより、スムーズにコマンドを呼び出すことができる

例:
ランチャー呼び出しのホットキーを`CapsLock`にして、コマンドのホットキーを`CapsLock`+`J`に設定していたとすると、以下のような動きになる

結果として、他アプリとのキー割り当ての干渉をあまり気にすることなく、グローバルホットキー的な機能が実現できる

### SandSに関する制限事項

- SandSの修飾キーとして選択したキーを押しっぱなしにした場合、普通の文字入力としてキーリピートする。

  - `Shift` `Ctrl` `Alt` `Win`などのような純粋な修飾キーのような動きにはならない

- SandSを実現するためにキーフックを利用している。キーフックの仕組みを用いた別のソフトが同時に動いている場合、競合してうまく動作しない場合がある

## ホットキーの種別の比較

種別ごとに実現している仕組みが異なる。

種別 | 実現方式 | メリット | デメリット
--- | --- | --- | ---
`アクティブ時のみ有効` | キーアクセラレータ | 他アプリに干渉しない 他アプリへの干渉を気にする必要がないのでキー選択の幅が広い | まずアクティブにする(入力画面を表示する)必要がある
`アクティブ時のみ有効(SandS)` | キーフックによる独自実装 | SandSの修飾キーとランチャー呼び出しキーの組み合わせにより、スムーズな運指が実現できる | まずアクティブにする(入力画面を表示する)必要がある
`常駐時いつでも有効` | グローバルホットキー | いつでも呼び出せる | 登録したキーを他アプリで使えなくなってしまう 他アプリに干渉することをふまえて割り当てるキーを慎重に選択する必要がある

`常駐時いつでも有効`はシステムのホットキーに登録するため、登録したキーを使って、いつでも呼び出せる一方で、ほかのアプリ内においてそのキーを使うことができなくなる

なお、`常駐時いつでも有効`で設定した場合でも、本アプリが一般権限で動作している状況において、管理者権限で動作しているアプリが前面にある状況ではホットキーは機能しない。