SANWAの使えないマウス「GlanzHS」を使えるように・・・

 

購入経緯

某ネットワークアクションゲームをやっていたのですが、操作の関係上、5ボタンマウスがあると楽じゃないか!!
と言う発想の元、購入を決意。とりあえず最寄の家電ショップに向かったのですが、事前によく調べておくべきでした・・。
5ボタン何てどれも同じだろうと思っており、とにかく安さを重点に購入しました。なんと定価4000円前後の値札の下に
2000円と書いてあるじゃないですか!!うほっ!!半額じゃん!!ちゃんとPS/2変換コネクタもあるし
パッケージ越しに触った所きれいに手にフィット。(使い道はわからんが横スクロールまで)もうこれしかない。

・・・いや。フツーの人ならここで半額ってことに何か怪しむのかもしれませんが。

 

動作検証

うーん。快適だ。昔使っていたマウスより若干スムーズな感じがする。ホイールもなんら問題はない。欲を言えば
中央ボタンが少し押しにくいと感じたくらいか。しかしマウスをぶっ挿しただけでは横スクロールや4ボタン、5ボタンは使えないようで
付属のCDを入れてインストールをする。・・・。



・・・。あれ?IEのスクロールが遅くなったぞ・・??
ホイールを回しても回しても加速がつかない。改悪された!!スクロールする単位が基本的におかしい。
開発者は余計なことしたとは思わなかったのだろうか。自分で使ってみたのかこれ?


まぁいいや、ゲームするときだけこれをつけて5ボタンを利用すれば。じゃあボタン登録してみようかね。
4ボタン割り当て「Shift, Alt, Ctrl, Ctrl+C, Ctrl+V, Ctrl+X ,,,,(その他ゴミのような(ry)」
5ボタン割り当て「Shift, Alt, Ctrl, Ctrl+C, Ctrl+V, Ctrl+X ,,,,(その他ゴミのような(ry)」
どうやら指定された数種類の内容しかマウスに割り当てできないようです。
製作者はこれ自分で使ってみたのか?



普通は自由に選べるものと思っていたのですがね。しかも何でこんないらない割り当てばかりなのでしょう。
ゲームで利用するのは「A」とか「B」とか「C」とかそういう割り当てであって決して
コピーやら切り取りやらをマウスでワンタッチでしたいわけではないんですよ!!
(ゲーム以外の用途で購入するにしてもコピーやら切り取りのためにマウスを買う人ってのは・・いないと思う。)

EasyJumpという機能もあるみたいですが、あまりにも酷過ぎるので省略します。

 

応急処置

とりあえずゲームでのキー割り当て、防御キーは偶然にもShiftだったのでマウス4ボタンをShiftに、これでまぁ何とかできるが
5ボタンに残された単独キーはAlt と Ctrl しか残されていない。ふざけんなよ
とりあえず泣く泣くゲームのキー割り当て「E」キーだったものを「Alt」キーに、そしてマウス5をAltに。もう一度言う。ふざけんな。

とりあえずこれでパコパコゲームして練習、うーん。なかなかよい感じだ。昔の名残で「E」キーを押してしまうのは何とも言えないが。
応急処置としてEキーを押したらAltキーを押すようなプログラムを組む。
以前作ってたDirectXを利用してキーボードのグローバルフックを行っているがソースが長いのでそこは省いておきます。

If syumireta = 1 Then
    If text = 18 Then
        Call syumireta_go
    End If
End If

Private Sub syumireta_go()
    keybd_event &H12, MapVirtualKey(&H12, 0), 0, 0
    keybd_event &H12, MapVirtualKey(&H12, 0), &H2, 0
    DoEvents
End Sub

しかし、何かこれは負けた気がする。
私が本当にしたいのは5ボタンに「E」キーを割り当てるはずなのに、この回りくどい方法は何なんだ!!

 

アセンブラ書き換え

やっちまえー!!とりあえずアセンブラで書き換える。
今回の目標は「5ボタンで「E」キーをシュミレートする」ことである。「糞mouse.exe」の中身をじっくり解析。
使われるであろう明らかに怪しい関数Keybd_event、MapVirtualKeyあたりは全てブレークに突っ込んで
動作開始時に発生したブレークしている関数は全て外して、ステータスバーにこのプログラムアイコンがでたあたりで
5ボタンを押してみる。見事に引っかかった。

004050CE |> 6A 00 PUSH 0 ; /ExtraInfo = 0; Case 10 of switch 00405042
004050D0 |. 6A 00 PUSH 0 ; |Flags = 0
004050D2 |. 6A 00 PUSH 0 ; |/Action = 0
004050D4 |. 6A 12 PUSH 12 ; ||Key = 12
004050D6 |. FF15 FC314100 CALL DWORD PTR DS:[<&USER32.MapVirtualKe>; |\MapVirtualKeyA
004050DC |. 50 PUSH EAX ; |ScanCode
004050DD |. 6A 12 PUSH 12 ; |Key = VK_MENU
004050DF |. FF15 EC314100 CALL DWORD PTR DS:[<&USER32.keybd_event>>; \keybd_event
004050E5 |. 5E POP ESI
004050E6 |. C3 RETN

5ボタンはAltキーを登録していたので、見事に辻褄が合う。
Case文で別けてるってことはマジで指定されたキー以外は割り当てさせる予定が無かったのでしょうかorz
(もちろんコンパイルの動きがわからないので何ともいえないですが)

しかし、まぁPUSH値を書き換えてしまえば好きなキーを登録できるようになるわけだ。
問題はこれをやると本当にそのゲーム専用になってしまうところ。まぁ私は書き換えましたが。
これで快適なゲーム生活が送れる・・・はず?

これをみて自分もGlanzHSのプログラム書き換えようと思った人、KEY_UP処理の方も忘れずにね。

 

総評

結局汎用性がない作りのままではあるが目標は達成したのでこれで良いとする。
今後また何が問題が発生したら、それはそのときに考えるとしましょう。

色々なキー割り当てをしたい人で、プログラムを組めない人、アセンブラ書き換えができない人は
この製品はお勧めできません。Logiあたりが良いらしいです。
でも私に試練を与えたこのマウス(ソフト)、私は好きです。多分。

出費    -2,000円

得たもの GlanzHSマウス
       アセンブラに関する知識
       キーボード関係のAPI知識
       快適なゲームライフ

 

このカテゴリのその他の記事