前回と変わったので、違う部分をメインに纏めておきます。

Pythonを使ってカスタマイズしますが、相変わらず、Pythonをよく分かっておりません。
そのうち覚えられたらいいな。

環境

  • Windows10 64bit
  • Magic Keyboard – US
  • Keyhac 1.82

補足

  • config.pykeyhac.iniは、keyhac.exeと同じディレクトリに置いておけば優先されるので、ポータブルで使用できます
  • 初期設定だとLWinUser0に割り当てられていますが、レジストリでW-lコンピューターのロックを無効にしても有効になってしまうので、LWinにしています
  • 前はキーを大文字で記載していましたが、Shift-SなどをS-Sなどと記載すると分かりづらくなるので、キーは基本小文字で載せています
  • 使用している時に動作がおかしくなったら、タスクバーのKeyhacを右クリック > 設定のリロードで、大抵直ると思います
  • 一部のソフトの動作で、KeyhacでフックをOFFにしないと正常に動かないことがあります
    • タスクバーのKeyhacを右クリック > フックをOFF
  • 仮想キーコードを調べる時は、Keymill仮想キーコード一覧が便利です

CapsLockとCtrlを入れ替えて、CapsLockをソフト起動のホットキーに使用できるようにする

前はCapsLockだけをCtrlにしましたが、ホットキーとして使えるようにします。
KeySwap for XPなどで、左下のCtrlCapsLockと入れ替えた後、KeyhacでCapsLockを、キーコード255LU0として、ユーザモディファイアキーの定義をします。
自分は、Magic Keyboardを使っているので、有料のAppleK Pro for 10 64bitで変更しています。
さらに、RWinCtrl(RCtrl)に変更しています。

ちなみに、ユーザモディファイアキーは、いつの間にか4つまで定義できるようになっています。

LU0-cでChrome起動

config.py

1
2
3
4
5
6
7
8
9
10
11
12
13
# キーの単純な置き換え
keymap.replaceKey( "Caps", 255 )

# ユーザモディファイアキーの定義
keymap.defineModifier( 255, "LU0" )

# --------------------------------------------------------------------
# どのウインドウにフォーカスがあっても効くキーマップ
if 1:
keymap_global = keymap.defineWindowKeymap()

# LU0-c : Google Chrome Portable 起動
keymap_global["LU0-c"] = keymap.ShellExecuteCommand(None, "Z:/GoogleChromePortable64/GoogleChromePortable.exe", "", "")

CapsLockがonになった

上記の設定をした後にCapsLockを押してon(点灯)になったときは、Keyhacが動かないソフトのことが多いです。
CapsLockをoffに戻すには、下記のどちらかを試して下さい。

  • Keyhacが動かないソフト上で、CapsLockを押してoff
  • タスクバーのKeyhacを右クリック > フックをOFFをクリック > CapsLockを押す > タスクバーのKeyhacを右クリック > フックをONをクリック

Keyhacを管理者権限で起動して、管理者権限で起動しているソフトでも動くようにする

管理者権限で動いている他のソフトでも、Keyhacが動くようにします。
それでも、一部のソフトは動かないこともありますが。

起動していたらKeyhacを終了 > keyhac.exeを右クリック > プロパティ > 互換性 > 設定 > 管理者としてこのプログラムを実行する on > Keyhacを起動

ただし、管理者権限のソフトから他のソフトを起動すると、起動したソフトも管理者権限で起動してしまうので、Keyhacから他のソフトを起動するときは注意です。
すでに起動しているソフトなら関係ないですが。

管理者権限でソフトが起動しているか確認

Ctrl-Shift-Esc > 詳細 > 名前などの列を右クリック > 列の選択 > 管理者特権 on

これで、管理者権限で動いているものは、管理者特権の列にはいと表示されます。

クリップボード監視を無効

Keyhac 1.74にて、クリップボード監視の 有効/無効 の切り替えができるようになりました。
デフォルトは有効ですので、無効にする時に設定します。

1
2
# クリップボード監視を無効
keymap.clipboard_history.enableHook(False)

文字選択

  • LW- y/u/i/o : 文字選択
  • LW-LC- y/u/i/o : 5回分の文字選択

テキストエディタなどで、キーボードのみで操作している時に便利だと思います。
マウスを使ったほうが早い時もありますが、マウスを持ち替えるのが面倒なときにも。

1
2
3
4
5
6
7
8
9
10
11
# LW- y/u/i/o : カーソル位置からカーソル1回分の文字列選択
keymap_global["LW-y"] = "S-Left"
keymap_global["LW-u"] = "S-Down"
keymap_global["LW-i"] = "S-Up"
keymap_global["LW-o"] = "S-Right"

# LW-LC- y/u/i/o : カーソル位置からカーソル5回分の文字列選択
keymap_global["LW-LC-y"] = ["S-Left"] * 5
keymap_global["LW-LC-u"] = ["S-Down"] * 5
keymap_global["LW-LC-i"] = ["S-Up"] * 5
keymap_global["LW-LC-o"] = ["S-Right"] * 5

文字削除

  • LW- ;/d : Back/Delete
  • LW-LC- ;/d : 5回分の Back/Delete

LW-LC- b/w : 一単語ごとに Back/Delete も割り当てていますが、日本語だと思った通りにいかないことが多いので、5回分の文字削除を追加してみましたがいい感じです。

1
2
3
4
5
6
7
# LW- ;/d : Back/Delete
keymap_global["LW-Semicolon"] = "Back"
keymap_global["LW-d" ] = "Delete"

# LW-LC- ;/d : 5回分の Back/Delete
keymap_global["LW-LC-Semicolon"] = ["Back"] * 5
keymap_global["LW-LC-d"] = ["Delete"] * 5

exe名とclass名を指定したソフトのみで有効にする

今までは、keymap_globalという名前で設定していました。
今度は、keymap_の後に名前をつけて、exe名とclass名を指定したソフトのみで有効にする設定です。

exe名とclass名のどちらかだけでも動きますが、指定したソフトの一部分だけで有効にしたい場合はclass名を指定しないと、ソフト全体でも効いてしまいます。
ただし、一部分のみで有効にしたいのに、名前が一緒で上手く設定できないこともありますが。

exe名とclass名の調べ方

タスクバーのKeyhacを右クリック > 内部ログONをクリック > タスクバーのKeyhacをクリック > 黒いウィンドウが表示される > 指定したいソフト上で何かキーを押すと、黒いウィンドウ上で押したキー情報と、exe名やclass名が表示されます。

Evernoteの検索ボックスで#を入力すると、半角スペース tag: と文字入力

tag:と打ってからタグ検索するのは面倒ですので、少し楽になると思います。
半角スペースが入っているので、2つ以上のタグを連続で検索するときも少し楽だと思います。

1.どこかでIMEの関数を定義しておく

IMEの切り替えは他でも使用しているので、作っておきます。

1
2
3
4
5
6
# IME切り替え
def ime_on():
keymap.wnd.setImeStatus(1)

def ime_off():
keymap.wnd.setImeStatus(0)

2.Evernoteのexeとclassを指定して、検索で文字入力するときにIME offにしてからタグ検索

1
2
3
4
5
6
7
8
9
# Evernote
if 1:
keymap_evernote_search = keymap.defineWindowKeymap(exe_name="Evernote.exe", class_name="ENAutoCompleteEditCtrl")

# RS-3 : 検索でIME offして文字入力 : 半角スペース tag:
def evernote_search_tag():
ime_off()
keymap.InputTextCommand(" tag:")()
keymap_evernote_search["RS-3"] = evernote_search_tag

纏めてexe指定

NeeViewやQuickViewerで、gg押すと最初に移動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 纏めてexe指定 gg
def is_gexe_target(window):
if window.getProcessName() in ("NeeView.exe",
"QuickViewer.exe"):
return True
return False

if 1:
keymap_gexe = keymap.defineWindowKeymap(check_func=is_gexe_target)

# g : マルチストローク1段
# gg : Home
keymap_gexe["g"] = keymap.defineMultiStrokeKeymap("g")
keymap_gexe["g"]["g"] = "Home"

纏めてclass指定

指定したclass名の場所で、gg押すと最初に移動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 纏めてclass指定 gg
def is_gclass_target(window):
if window.getClassName() in ("TFenrirListView", # FenrirFs
"TFullScreenWindow", # FenrirFs プレビューフルスクリーン
"SUMATRA_PDF_FRAME", # Sumatra PDF
"Qt5151QWindowIcon", # Xnview MP
"WindowsForms10.Window.8.app.0.34f5582_r6_ad1"): # ZipPla
return True
return False

if 1:
keymap_gclass = keymap.defineWindowKeymap(check_func=is_gclass_target)

# g : マルチストローク1段
# gg : Home
keymap_gclass["g"] = keymap.defineMultiStrokeKeymap("g")
keymap_gclass["g"]["g"] = "Home"

纏めて除外 exe指定

纏めてexe指定と違う部分は、TrueFalseを逆にしているだけです。

日本語入力中によく使う半角記号を打ちやすく

日本語入力中にIME offにして、半角記号打つのが面倒に感じることがたまにありました。
全角記号を殆ど使わないので、IME offにしなくてもよく使う半角記号を打てるようになるので、少し楽になるかなと。
記号の後に日本語打つことが多いなら、IME onにする処理を入れるとさらに楽になりそうです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 纏めて除外 exe指定
def is_exclude_exe_target(window):
if window.getProcessName() in ("Nox.exe"):
return False
return True

if 1:
keymap_exclude_exe = keymap.defineWindowKeymap(check_func=is_exclude_exe_target)

# IME offして半角記号入力 日本語入力中によく使う半角記号を打ちやすく
# 短い間隔でShift2回押しても問題ない環境 全角記号あまり使わない用
# Boostnoteの検索ウィンドウで効かない
# ` : `
def symbol_1byte_backquote():
ime_off()
keymap.InputTextCommand("`")()
keymap_exclude_exe["BackQuote"] = symbol_1byte_backquote

# RS- 1/3 : !/#
def symbol_1byte_exclamation():
ime_off()
keymap.InputTextCommand("!")()
keymap_exclude_exe["RS-1"] = symbol_1byte_exclamation

def symbol_1byte_number():
ime_off()
keymap.InputTextCommand("#")()
keymap_global["RS-3"] = symbol_1byte_number

# LS- 8/9/0 : */(/)
def symbol_1byte_asterisk():
ime_off()
keymap.InputTextCommand("*")()
keymap_exclude_exe["LS-8"] = symbol_1byte_asterisk

def symbol_1byte_left_parenthesis():
ime_off()
keymap.InputTextCommand("(")()
keymap_exclude_exe["LS-9"] = symbol_1byte_left_parenthesis

def symbol_1byte_right_parenthesis():
ime_off()
keymap.InputTextCommand(")")()
keymap_exclude_exe["LS-0"] = symbol_1byte_right_parenthesis

# LS-- : _
def symbol_1byte_underscore():
ime_off()
keymap.InputTextCommand("_")()
keymap_exclude_exe["LS-Minus"] = symbol_1byte_underscore

# LS-. : >
def symbol_1byte_greater_than():
ime_off()
keymap.InputTextCommand(">")()
keymap_exclude_exe["LS-Period"] = symbol_1byte_greater_than

# LS-/ : ?
def symbol_1byte_question_mark():
ime_off()
keymap.InputTextCommand("?")()
keymap_exclude_exe["LS-Slash"] = symbol_1byte_question_mark

# LW-- : - 半角スペース
def symbol_1byte_minus_space():
ime_off()
keymap.InputTextCommand("- ")()
keymap_exclude_exe["LW-Minus"] = symbol_1byte_minus_space

クリップボード機能を使うときに他のクリップボード機能と干渉する

Excel以外でも対策になることがあるので、困ったら試してみるといいかもしれない。

まあ、クリップボード機能は使っていないですが。

設定ファイル

config.py

追記

2017-12-28

  • LW-C- y/u/i/o : カーソル位置から Left/Down/Up/Right 5回分の文字列選択 > LW-LC- y/u/i/o へ変更。
  • 文字削除の説明を追加。
  • LW-LC- d/; : 5回分の Delete/Back 追加

2018-02-18

  • U0 : User0 > LU0へ変更
  • 文字削除の説明を修正
  • LW- d/; : Delete/Back > LW- d/'へ変更
  • LW-LC- d/; : 5回分の Delete/Back > LW-LC- d/'へ変更
  • LW-[ : Esc > LW-;へ変更

2018-03-18

  • CapsLockとCtrlを入れ替えて、CapsLockをソフト起動のホットキーに使用できるようにするの説明に追加
  • Evernoteの検索ボックスで#を入力すると、半角スペース tag:と文字入力を修正
  • IME offしてから文字入力するように修正

2018-04-19

  • 補足を冒頭に移動して修正、追加
  • Evernoteの検索ボックスで#(RS-3)を入力すると、半角スペース tag:と文字入力を修正

2018-04-22

  • 纏めて除外 exe指定の説明を追加

2018-11-30

  • 補足にフックをOFFの説明を追加
  • LW- '/d : Back/Delete > LW- ;/dへ変更
  • LW-LC- '/d : 5回分の Back/Delete > LW-LC- '/dへ変更
  • LW-; : Esc > O-LShiftへ変更

2019-04-26

  • LW-x, v : 一行選択 追加
  • LW-x, c : 一行選択してコピー 追加
  • LW-x, d : 一行選択して削除 追加
  • LW-x, x : 一行選択して切り取り 追加

2019-05-03

  • LW-x, v : 一行選択 > LW-x, lへ変更
  • LW-x, v : 一行選択して貼り付け 追加

2020-12-13

  • Keyhac 1.77 > Keyhac 1.82へ変更

2021-01-07

  • 纏めてexe指定 修正
  • 纏めてclass指定 修正

2021-06-16

  • Keyhacを管理者権限で起動して、管理者権限で起動しているソフトでも動くようにする 追加

2021-11-27

  • 補足 修正
  • クリップボード機能を使うときに他のクリップボード機能と干渉する 追加