Keyhacは、Pythonを使用した、キーボード操作やキーバインドなどを変更、設定できるソフトです。
Pythonを使用すると高度なカスタマイズも出来るようです。自分は出来ませんが。
簡単なキーバインドならば、初期設定を見ながらなんとなく設定できると思います。

以前から、Windowsキーを殆ど使わないので勿体無いなーと思っていたので、他の用途に使えるように設定しました。
ソフトによっては、うまく動かなかったり、一部だけ動いたりするので注意です。

環境

  • Windows7 64bit
  • Keyhac 1.70
  • Apple Wireless Keyboard (US)

基本的に、Windosキーは、親指で押しています。

CapsLockキーと右Windowsキーをそれぞれ変更

CapsLockキーのCtrl変更は、KeySwap for XPで、レジストリ変更して適用しています。レジストリ変更が無難です。
CapsLockをLCtrlへ。RWinをRCtrlに代えます。RCtrlに変更するのはKeyhacでもいいです。

RWinは使っていないので、RCtrlにすると使える用途があると思います。
また、RCtrlは下記設定の一部しか重複しないので、他で使える場面が出てくるかなと思います。

Windowsキー + L (コンピューターをロック)を無効にする

KeyhacでWin-Lを上書きし切れなく、設定されたものが実行された後に、コンピューターがロックされます。
非常に不便で、暴発すると困るので無効化します。

ブログのヒント: ワークステーションをロックする機能を有効/無効にすると(Windows + L)
regファイルも配布されていますので、保存しておくと便利だと思います。

設定補足

テキストエディタやフォントなどの設定は、自分の環境に合わせて下さい。
それなりにキーバインドを追加しているので、長いと思います。

クリップボード履歴機能の無効

初期状態で有効になっていますが、クリップボード管理は、Cliborを使用しているので無効に。
クリップボード履歴の最大数を0にすることで、一応無効になります。

右Altをアプリケーションキーに

使用していないので、アプリケーションキー(右クリックメニュー)に変更しています。付いていないので。
ファイラなどでキーボードのみで操作中に、ウィルススキャンやプロパティ表示などをしたい時があり、その都度、マウスに持ち替えるのが面倒なのと、時間も勿体無いなと思うので。

左Windowsキー離した時にスタートメニュー非表示

コマンドラインランチャーの、ZiiLauncherを使っているので、スタートメニューを殆ど使っていません。
また、LWinを使った設定を追加するので、暴発を防ぐ為にも無効化しています。

非表示にしたけど、スタートメニュー使いたい > Ctrl-Esc

左Windowsキー/右Ctrl を押した時にIME off/on、他のキーと押した時は元のキー

[keyhacで[半角/全角]キーの1回・2回押しでIME OFF・ONを切り替える - Koonies/こりゃいいな!](http://d.hatena.ne.jp/Koonies/20110818/keyhac_double_key_ime)
Windowsでemacsキーバインド+IME操作 » RainbowDevilsLand
参考に変更します。

Google 日本語入力を使用していて、デフォルトでバルーン表示(Aorあ)で動作が被るので、この部分を削除。
IMEがどちらの状態か、常に覚えている方は殆ど居ないと思うので、慣れると便利だと思います。覚えているときは、いつも通りの切り替え方法と使い分けしています。
ちなみに、Google 日本語入力で切り替えするときはCtrl-Space使っていましたが、殆ど使わなくなりました。

前は、RWinを 1/2 回押して、IME off/on を使っていましが、こちらの方が楽です。
ただし、設定したLW~キーバインドなどを使おうとして辞めて、LW離した時のIME変換に注意。

LW- H/L/J/K : Left/Right/Down/Up

H/L/J/K でカーソル移動がしたかった。
ボタン2個押すよりも1個の方が楽…そう思っていた時代が僕にもありました。
状況しだいでは、2個の方が速いかなと。

LW- A/E : Home/End

片手で打てるのが利点。

LW- N/P : Next Tab / Previous Tab

次のタブに移動するCtrl-Tabは比較的押しやすいんですが、前のタブに戻るCtrl-Shift-Tabが押しづらいので。
片手では押せないですが。

LW- D/LS-D : Delete/Back

片手で削除出来るのは便利。

LW-: : Esc

よく使うので、押しやすい位置へ。
USキーボードなので;に設定したいですが、:にしないと;で動かない。

LW- 10 : F1F10 / LW- -/= : F11/F12

F1F12は、指をえぃ!という感じで伸ばして押さないといけないので、少しは楽になるかなと。
後、F1
F12キーは、見ながら打たないと押し間違えている自分がいますが、数字キーなら慣れれば見なくても押せるっぽい?

LW-LS-3 : 逆順に検索

ソフトにもよりますが、F3で順に検索出来る場合は、Shiftを付けると逆順に検索します。
押すボタンは増えますが押しやすいかなと。

LW- Space/LS-Space : PageDown/PageUp

Spaceでブラウザみたいに移動したかった為で、両手でキーボード使っているときは打ちやすいです。

LW- O/I : 戻る/進む

個人的に使う機会が殆どないですが、一応設定しています。

LW- S/LS-S : Switch to the next/previous window

ウィンドウが少ないなら、Alt-TabよりもAlt-Escの方が切り替え速いが押しづらい為。最小化は対象外。
使わなくなったウィンドウはAlt-Space,Cで閉じている事が多いので、便利です。

LW- B/W 関連 : 一単語ごとに 移動/選択/削除

  • LW- B/W : 一単語ごとにカーソル移動
  • LW-LS- B/W : 一単語ごとに文字列選択
  • LW-LC- B/W : 一単語ごとに Back/Delete

割と便利ですが、日本語だと上手くいかない事が多いので気を付けて下さい。

LW- LC/LS - H/L/J/K/A/E の組み合わせ

  • LW-LS- H/L/J/K : カーソル位置から移動したところまでの文字列選択
  • LW-LC- H/L/J/K : カーソル位置からカーソル6回分移動
  • LW-LC-LS- H/L/J/K : カーソル位置からカーソル6回分の文字列選択
  • LW-LS- A/E : カーソル位置から 行頭/行末 まで文字列選択
  • LW-LC- A/E : 文章の 最初/最後 へ移動
  • LW-LC-S- A/E : カーソル位置から文章の 最初/最後 まで文字列選択

H/L/J/K などでカーソル移動出来るようにしたので、文字列選択なども出来るようにしています。押しづらいのもありますが、カーソル6回分のは便利だと思います。
最後のは片手だけだと押しづらいので、RShiftでも出来るようにしています。

初期状態のを少し変えたもの

  • LW- Left/Right/Down/Up : 40pixel単位のウインドウ移動
  • LW-LA- Left/Right/Down/Up : 400pixel単位のウインドウ移動
  • LW-LS- Left/Right/Down/Up : 画面端までウィンドウ移動
  • LW-LC- Left/Right/Down/Up : キーボードで擬似マウス 40pixel単位のカーソル移動
  • LW-LA-LC- Left/Right/Down/Up : キーボードで擬似マウス 400pixel単位のカーソル移動
  • LW-LA-Space : キーボードで擬似マウス 左クリック

最後以外は、矢印キーを使っています。キーバインドが厳しいので。
ウィンドウ移動は便利だと思います。疑似マウスの方は使用頻度はかなり低めなので、削除でも問題ないかと。

設定ファイル

config.py

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import sys
import os
import datetime

import pyauto
from keyhac import *

def configure(keymap):

# --------------------------------------------------------------------
# config.py編集用のテキストエディタの設定

# プログラムのファイルパスを設定 (単純な使用方法)
if 1:
keymap.editor = "C:\\tools\\Sublime-Text\\sublime_text.exe"

# --------------------------------------------------------------------
# 表示のカスタマイズ

# フォントの設定
keymap.setFont( "Ricty", 16 )

# テーマの設定
keymap.setTheme("black")

# --------------------------------------------------------------------
# クリップボード履歴の最大数 (デフォルト:1000)
keymap.clipboard_history.maxnum = 0


# キーの単純な置き換え
keymap.replaceKey( "RAlt", "Apps" )


## IME切り替え
#
# @param flag 切り替えフラグ(True:IME ON / False:IME OFF)
#
def switch_ime(flag):

# if not flag:
if flag:
ime_status = 1
else:
ime_status = 0

# IMEのON/OFFをセット
keymap.wnd.setImeStatus(ime_status)

def ime_on():
switch_ime(True)

def ime_off():
switch_ime(False)

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

# U-LW : LW離した時にスタートメニュー非表示
# スタートメニュー使いたい > C-Esc
keymap_global[ "U-LWin" ] = "LW-RShift"

# O- LW/RCtrl : LW/RC 押した時にIME off/on
# 他のキーと押した時は、元のキー扱い
keymap_global["O-LWin" ] = ime_off
keymap_global["O-RCtrl"] = ime_on

# LW- H/L/J/K : Left/Right/Down/Up
keymap_global[ "LW-H" ] = "Left"
keymap_global[ "LW-L" ] = "Right"
keymap_global[ "LW-J" ] = "Down"
keymap_global[ "LW-K" ] = "Up"

# LW- A/E : Home/End
keymap_global[ "LW-A" ] = "Home"
keymap_global[ "LW-E" ] = "End"

# LW- N/P : Next/Previous Tab
keymap_global[ "LW-N" ] = "C-Tab"
keymap_global[ "LW-P" ] = "C-S-Tab"

# LW- D/LS-D : Delete/Back
keymap_global[ "LW-D" ] = "Delete"
keymap_global[ "LW-LS-D" ] = "Back"

# LW-: : Esc : ;に割り当てたいが:に設定しないと;で動かない
keymap_global[ "LW-Colon" ] = "Esc"

# LW- 1~0 : F1~F10 LW- -/= : F11/F12
keymap_global[ "LW-1" ] = "F1"
keymap_global[ "LW-2" ] = "F2"
keymap_global[ "LW-3" ] = "F3"
keymap_global[ "LW-4" ] = "F4"
keymap_global[ "LW-5" ] = "F5"
keymap_global[ "LW-6" ] = "F6"
keymap_global[ "LW-7" ] = "F7"
keymap_global[ "LW-8" ] = "F8"
keymap_global[ "LW-9" ] = "F9"
keymap_global[ "LW-0" ] = "F10"
keymap_global[ "LW-Minus" ] = "F11"
keymap_global[ "LW-Plus" ] = "F12"

# LW- Space/S-Space : PageDown/PageUp
keymap_global[ "LW-Space" ] = "PageDown"
keymap_global[ "LW-S-Space" ] = "PageUp"

# LW- O/I : 戻る/進む
keymap_global[ "LW-O" ] = "LA-Left"
keymap_global[ "LW-I" ] = "LA-Right"

# LW- S/LS-S : Switch to the previous/next window
keymap_global[ "LW-S" ] = "LA-Esc"
keymap_global[ "LW-LS-S" ] = "LA-LS-Esc"

# LW- B/W : 一単語ごとにカーソル移動
keymap_global[ "LW-B" ] = "LC-Left"
keymap_global[ "LW-W" ] = "LC-Right"

# LW-LS- B/W : 一単語ごとに文字列選択
keymap_global[ "LW-LS-B" ] = "LC-LS-Left"
keymap_global[ "LW-LS-W" ] = "LC-LS-Right"

# LW-LC- B/W : 一単語ごとに Back/Delete
keymap_global[ "LW-LC-B" ] = "LC-Back"
keymap_global[ "LW-LC-W" ] = "LC-Delete"

# LW-LS- H/L/J/K : カーソル位置から移動したところまでの文字列選択
keymap_global[ "LW-LS-H" ] = "LS-Left"
keymap_global[ "LW-LS-L" ] = "LS-Right"
keymap_global[ "LW-LS-J" ] = "LS-Down"
keymap_global[ "LW-LS-K" ] = "LS-Up"

# LW-LC- H/L/J/K : カーソル位置からカーソル6回分移動
keymap_global[ "LW-LC-H" ] = "Left","Left","Left","Left","Left","Left"
keymap_global[ "LW-LC-L" ] = "Right","Right","Right","Right","Right","Right"
keymap_global[ "LW-LC-J" ] = "Down","Down","Down","Down","Down","Down"
keymap_global[ "LW-LC-K" ] = "Up","Up","Up","Up","Up","Up"

# LW-LC-LS- H/L/J/K : カーソル位置からカーソル6回分の文字列選択
keymap_global[ "LW-LC-LS-H" ] = "LS-Left","LS-Left","LS-Left","LS-Left","LS-Left","LS-Left"
keymap_global[ "LW-LC-LS-L" ] = "LS-Right","LS-Right","LS-Right","LS-Right","LS-Right","LS-Right"L
keymap_global[ "LW-LC-LS-J" ] = "LS-Down","LS-Down","LS-Down","LS-Down","LS-Down","LS-Down"
keymap_global[ "LW-LC-LS-K" ] = "LS-Up","LS-Up","LS-Up","LS-Up","LS-Up","LS-Up"

# LW-LS- A/E : カーソル位置から 行頭/行末 まで文字列選択
keymap_global[ "LW-LS-A" ] = "LS-Home"
keymap_global[ "LW-LS-E" ] = "LS-End"

# LW-LC- A/E : 文章の 最初/最後 へ移動
keymap_global[ "LW-LC-A" ] = "LC-Home"
keymap_global[ "LW-LC-E" ] = "LC-End"

# LW-LC-S- A/E : カーソル位置から文章の 最初/最後 まで文字列選択
keymap_global[ "LW-LC-S-A" ] = "LC-LS-Home"
keymap_global[ "LW-LC-S-E" ] = "LC-LS-End"


# LW- Left/Right/Down/Up : 40pixel単位のウインドウ移動
keymap_global[ "LW-Left" ] = keymap.command_MoveWindow( -40, 0 )
keymap_global[ "LW-Right" ] = keymap.command_MoveWindow( +40, 0 )
keymap_global[ "LW-Down" ] = keymap.command_MoveWindow( 0, +40 )
keymap_global[ "LW-Up" ] = keymap.command_MoveWindow( 0, -40 )

# LW-LA- Left/Right/Down/Up : 400pixel単位のウインドウ移動
keymap_global[ "LW-LA-Left" ] = keymap.command_MoveWindow( -400, 0 )
keymap_global[ "LW-LA-Right" ] = keymap.command_MoveWindow( +400, 0 )
keymap_global[ "LW-LA-Down" ] = keymap.command_MoveWindow( 0, +400 )
keymap_global[ "LW-LA-Up" ] = keymap.command_MoveWindow( 0, -400 )

# LW-LS- Left/Right/Down/Up : 画面端までウィンドウ移動
keymap_global[ "LW-LS-Left" ] = keymap.command_MoveWindow_MonitorEdge(0)
keymap_global[ "LW-LS-Right" ] = keymap.command_MoveWindow_MonitorEdge(2)
keymap_global[ "LW-LS-Down" ] = keymap.command_MoveWindow_MonitorEdge(3)
keymap_global[ "LW-LS-Up" ] = keymap.command_MoveWindow_MonitorEdge(1)

# LW-LC- Left/Right/Down/Up : キーボードで擬似マウス 40pixel単位のカーソル移動
keymap_global[ "LW-LC-Left" ] = keymap.command_MouseMove(-40,0)
keymap_global[ "LW-LC-Right" ] = keymap.command_MouseMove(40,0)
keymap_global[ "LW-LC-Down" ] = keymap.command_MouseMove(0,40)
keymap_global[ "LW-LC-Up" ] = keymap.command_MouseMove(0,-40)

# LW-LA-LC- Left/Right/Down/Up : キーボードで擬似マウス 400pixel単位のカーソル移動
keymap_global[ "LW-LA-LC-Left" ] = keymap.command_MouseMove(-400,0)
keymap_global[ "LW-LA-LC-Right" ] = keymap.command_MouseMove(400,0)
keymap_global[ "LW-LA-LC-Down" ] = keymap.command_MouseMove(0,400)
keymap_global[ "LW-LA-LC-Up" ] = keymap.command_MouseMove(0,-400)

# LW-LA-Space : キーボードで擬似マウス 左クリック
keymap_global[ "D-LW-LA-Space" ] = keymap.command_MouseButtonDown('left')
keymap_global[ "U-LW-LA-Space" ] = keymap.command_MouseButtonUp('left')

追記

15-02-08

  • LW- F/LS-F削除。EvernoteのWindows-Shift-Fが使えない為
  • LW- S/W追記。Alt-Esc押しづらい為

15-02-28

  • LW-LA- H/L : 戻る/進む > LW- O/Iへ変更

15-04-15

  • LW-B : Back > LW-LS-Dへ変更
  • LW-W : Switch to the previous window > LW-LS-Sへ変更
  • LW-LC- H/L : 一単語ごとにカーソル移動 > LW- B/Wへ変更
  • LW-LC-LS- H/L : 一単語ごとに文字列選択 > LW-LS- B/Wへ変更
  • LW-LC- B/D : 一単語ごとに Back/Delete > LW-LC- B/Wへ変更
  • LW-LC- H/L/J/K : カーソル位置からカーソル6回分移動を追加
  • LW-LC-LS- H/L/J/K : カーソル位置からカーソル6回分の文字列選択を追加

15-04-27

  • LW-LC-LS- Left/Right/Down/Up : キーボードで擬似マウス 400pixel単位のカーソル移動 > LW-LA-LC- Left/Right/Down/Upへ変更
  • LW-LC- A/E : 文章の 最初/最後 へ移動を追加

15-09-25

  • RW 1/2 回押してIME off/onを削除
  • LW-LC-LS- A/E : カーソル位置から文章の 最初/最後 まで文字列選択 > LW-LC-S- A/Eへ変更
  • KeySwap for XPで、RWinをRCtrlへ追加
  • O- LWin/RCtrl : IME off/onを追加

15-11-25

  • 誤字修正。キーバインドに影響はありません

15-12-11

  • LW-[ : Esc > LW-:へ変更

16-01-16

  • keyhac 1.64 > Keyhac 1.70 へ変更。
    • 一文字目が大文字に変わったので、記事タイトル変更。
    • 一部の関数名が変更の為に書き換え。前のバージョンでは動きません。
  • LW-LS-3 : 逆順に検索を追加。

17-12-28