トラックポイントつきのIBMのキーボードを手に入れたので、パソコンの操作をキーボードに集杓してみたいと思い、キーボードのキーカスタマイズを使いはじめました。
Windowsでキーカスタマイズをしたい場合、窓使いの憂鬱が有名ですが、Vistaに対応していないし、後継のソフトは有料だしマウス操作ができないので他のソフトウェアを探していたらPythonでカスタマイズを書けるkeyhacというソフトウェアを見つけました。作者さんに感謝です。
基本的な使い方は結構簡単で、起動したらconfig.pyとうファイルができるので、これをいじっていきます。
config.pyにカスタマイズ例が載っているので、キーを他のキーに割り当てるのは簡単にできます。デフォルトの設定では左のWindowsキー+矢印でウィンドウの位置を移動させたり、Windowsキー+F3でメモ帳を立ち上げたりできる設定になっています。
しかし、マウス操作の例がなく方法がわからず困ってました。マニュアルを見ていると pyautoという同じ作者さんが作られたソフトを内蔵しているらしく、この機能をつかうことでいろいろなWindowsの操作ができるようです。ただし、pyauto自体はAPIのドキュメントやサンプルが少ないのでやり方を書いておきます。ここではユーザが定義したモディファイアキー(U0)+Returnでマウスのミドルクリックを実現します。
まずはじめに、pyautoのモジュールをimportします。
from keyhac import * from pyauto import *
configure関数の中でミドルクリックを行う関数をかいて、その関数をU0+Returnに割り当てます。
def m_MClick():
x, y = Input.getCursorPos()
Input.send([MouseMiddleClick(int(x), int(y)),])
keymap_global[ "U0-Return" ] = m_MClick
maznが適当にカスタマイズしてみたconfig.py全体はこんな感じです。無変換+○でいろいろな機能を実現していて、無変換 + h,j,k,lキーでviのようなカーソル操作、無変換+ ","と"."でブラウザの戻る・進む、無変換+Returnでミドルクリックができます。
from keyhac import *
from pyauto import *
def configure(keymap):
# config.py編集用のテキストエディタの設定
keymap.editor = u"notepad.exe"
# 無変換キー(29)を仮想キー255に割り当て
keymap.replaceKey( 29, 255 )
# 255をユーザモディファイアキーに追加
keymap.defineModifier( 255, "User0" )
# どのウインドウにフォーカスがあっても効くキーマップ
if 1:
keymap_global = keymap.defineWindowKeymap()
# vi風にカーソル移動
keymap_global[ "U0-K" ] = keymap.command_InputKey("Up")
keymap_global[ "U0-J" ] = keymap.command_InputKey("Down")
keymap_global[ "U0-H" ] = keymap.command_InputKey("Left")
keymap_global[ "U0-L" ] = keymap.command_InputKey("Right")
keymap_global[ "U0-A" ] = keymap.command_InputKey("Home")
keymap_global[ "U0-E" ] = keymap.command_InputKey("End")
# Shift
keymap_global[ "U0-S-K" ] = keymap.command_InputKey("S-Up")
keymap_global[ "U0-S-J" ] = keymap.command_InputKey("S-Down")
keymap_global[ "U0-S-H" ] = keymap.command_InputKey("S-Left")
keymap_global[ "U0-S-L" ] = keymap.command_InputKey("S-Right")
keymap_global[ "U0-S-A" ] = keymap.command_InputKey("S-Home")
keymap_global[ "U0-S-E" ] = keymap.command_InputKey("S-End")
# Ctrl
keymap_global[ "U0-C-K" ] = keymap.command_InputKey("C-Up")
keymap_global[ "U0-C-J" ] = keymap.command_InputKey("C-Down")
keymap_global[ "U0-C-H" ] = keymap.command_InputKey("C-Left")
keymap_global[ "U0-C-L" ] = keymap.command_InputKey("C-Right")
# 戻る・進む
keymap_global[ "U0-Comma" ] = "166"
keymap_global[ "U0-Period" ] = "167"
# U0-Returnでマウスのミドルクリック
def m_MClick():
x, y = Input.getCursorPos()
Input.send([MouseMiddleClick(int(x), int(y)),])
keymap_global[ "U0-Return" ] = m_MClick