MX-Revolutionを使いやすく改造

id:pneumaster:20080122:1200963669の続きかもしれません.


わたしはMX-Revolution
http://www.logicool.co.jp/index.cfm/mice_pointers/mice/devices/130&cl=jp,ja
を使っているのですが,
先日こんな記事を見つけました.
http://ils.neue.cc/info/tech/pc/060920.htm
http://zetpoint.blog62.fc2.com/blog-entry-3.html


つまりはMX-RをAutoHotKeyhttp://www.autohotkey.com/)というソフトを使って
拡張しようという話です.
使わない理由はない!ということでやってみました.
結論からいうと,こんな感じに割り当てました.

左ボタン:そのまま
右ボタン:右ボタン
 +Ctrl:コピー
 +Shift:貼り付け
ホイールボタン類:そのまま
チルト右左:そのままチルト
検索ボタン:中ボタン
 +Ctrl:拡大
 +Shift:貼り付け
第4ボタン:進む
第5ボタン:戻る
ジョグ奥:Ctrl
ジョグ押し込み:Enter
ジョグ手前:Shift


さて,どう実装したかの話です.
Setpointのドライバのバージョンは3.01であることを前提にします.
# 下のリンク先には3.10とありますが,私は3.01を使っています
まず,3.01用の改造xml(id:solipt:20060925:1159118407)を用いて,
Setpointを改造しておきます.
その後Setpointで割り当てられる検索ボタン,第4,第5ボタンになんでもいいので
キーボードのキーを割り振っておきます.
右クリックにはSetpointからは割り振れないようになっています.


次はSetpointを終了して,
(多分)%APPDATA%\Logitech\SetPointにあるuser.xmlを編集します.

<Button Number="***" Name="***">
	<Param IconLoc="" Type=""/>
	<Trigger Class="ButtonPress">
		<Param Button="***" FirstRepeatDelay="0" RepeatDelay="0" Silent="0" Type="0"/>
		<TriggerState Name="ButtonDownUp" HandlerSet="KeystrokeAssignment">
			<Handler Class="KeystrokeAssignment">
				<Param DisplayName="F5" LParam="4128769" Modifier="0" VirtualKey="116"/>
			</Handler>
		</TriggerState>
	</Trigger>
</Button>

各ボタンはこんな感じになっていると思います.
Button Number, Name, Buttonのフィールドは各ボタンに対するものになっているみたいです.
編集するのは一番深い部分のVirtualKeyです,
わたしは冒頭のサイトの方と同じように,通常キーボードにないキーに割り当てました.
そして右クリックにも割り当てたかったのでButton Number=2のところを
キーを既に割り当てたボタンと同じように編集しました.
ここまでで,

右クリック:F18
中クリック:F13
第4ボタン:F15
第5ボタン:F14

に割り当てました.


最後にAHKで次のスクリプトを実行します.

 vk81 Down::Send {RButton DOWN}
 vk81 Up::Send, {RButton UP}
^vk81 Up::Send, ^c
+vk81 Up::Send, ^v

 vk7C Down::Send, {MButton DOWN}
 vk7C Up::Send, {MButton UP}
^vk7C Up::Send, ^1
+vk7C Up::Send, ^v

 vk7D Down::Send, {XButton2 DOWN}
 vk7D Up::Send, {XButton2 UP}

 vk7E Down::Send, {XButton1 DOWN}
 vk7E Up::Send, {XButton1 UP}


これで期待する動作をしていると思います.
押し下げ時と離す時のイベントを分けないと,
ブラウザなどでマウスジェスチャーなどのボタンを押しながらマウスを動かす,
といったことができません.
よく考えてみるとデスクトップ等で右クリック時のポップアップは
右ボタンを離す時に生じているのですね.


わたしは,
ちなみに窓使いの憂鬱を使っているのですが,AHKの同時使用は推奨されていません.
何が起きるのか分からないのでAHKWindows起動時には自動起動しないようにしているため,
AHKを起動するまで右クリックが効きません.


追記:Ctrl+中ボタンの拡大について触れてませんでした.
ZoomIt
http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx
というソフトのホットキーに割り当てているだけです.

AHK練習中のゴミ

窓使いの憂鬱と一緒に使うのはよくないということで,
窓使いの憂鬱の部分もAHKで書いてしまおうと考えました.
最終的には断念しましたが...


その時に書いたゴミを貼り付けておきます.

; for viewing key history
#InstallKeybdHook
#KeyHistory 100

; deny key loop
#UseHook On


; convert us keymap on jp106
+vk32sc003::Send, @		; key S-2
+vk36sc007::Send, {^}		; key S-6
+vk37sc008::Send, &		; key S-7
+vk38sc009::Send, *		; key S-8
+vk39sc00A::Send, (		; key S-9
+vk30sc00B::Send, )		; key S-0
+vkBDsc00C::Send, _		; key S--
 vkDEsc00D::Send, =		; key ^
+vkDEsc00D::Send, {+}		; key S-^
 vkC0sc01A::Send, [		; key @
+vkC0sc01A::Send, {{}		; key S-@
 vkDBsc01B::Send, ]		; key [
+vkDBsc01B::Send, {}}		; key S-[
+vkBBsc027::Send, :		; key S-;
 vkBAsc028::Send, '		; key :
+vkBAsc028::Send, "		; key S-:
 vkDDsc02B::Send, \		; key ]
+vkDDsc02B::Send, |		; key S-]

*vkDCsc07D::Send, {BS}		; key *-\(bar/yen)
 vkE2sc073::Send, ``		; key \(ろ)
+vkE2sc073::Send, ~		; key S-\(ろ)

*vk1Dsc07B::LALT		; mod alt += 無変換
+~vk1Dsc07B & Tab::AltTab		; mod alt += 無変換
; *sc070::RALT			; このスクリプトは再起動を要する
; *vkF2sc070::RALT		; このスクリプトは再起動を要する
; *vkF2sc070::RALT
; 	Send, {vkF0sc070}
; 	return
; *vk1Csc079::RALT		; mod alt += 変換
*vkA5sc138::LWIN		; mod alt -= RightAlt
				; mod win	+= RightAlt
				; key *Rightalt	= *LeftWindows

; emacs like
^a::Send, {Home}
^e::Send, {END}
^p::Send, {UP}
^n::Send, {DOWN}
^b::Send, {LEFT}
^f::Send, {RIGHT}
^d::Send, {DEL}
^h::Send, {BS}
^k::Send, +{END}^x	; カーソルが行末にある場合,emacsとは異なる動作になる
^u::Send, +{HOME}^x	; カーソルが行頭にある場合,emacsとは異なる動作になる
^o::Send, {END}{ENTER}		; Enterでチャットなどの入力になる虞あり?
+^o::Send, {HOME}{ENTER}{UP}	; Enterでチャットなどの入力になる虞あり?

^s::Send, ^f		; for search
^!+s::Suspend		; toggle-suspend

*vk1Csc079::return		; mod alt += 無変換
vk1Csc079 & j::send, {down}
vk1Csc079 & k::send, {up}
vk1Csc079 & h::send, {left}
vk1Csc079 & l::Send, {RIGHT}


#UseHook Off

英語配列Emacsキーバインドを途中まで再現しましたが,
Alt-Tabの動作が怪しかったのと,
窓使いの憂鬱のフォーマットの方が私の性分にあっていたので諦めました.
ひらがなキーあたりもあやしいです.
一連の流れは2ch*1で空気の読めない発言をしてますので,
詳細とか私が苦しんでる様子はそちらを見てください(泣)

共存の状態で不具合が起きたら,また復活させると思います.