最終更新: 2010-01-12T06:09+0900
Vistaに対応した最初の SetPoint version 4.00がリリースされてから一度もアップデートがないのだけど。
MX610に同梱されてた SetPointから続く、Firefoxに Ctrl+Wを投げてウィンドウを閉じると時々 Ctrlキーが押し下げ状態のままになってしまって、Ctrlキーを一度押し直して解除してやる必要に迫られる問題は残されたまま。
Ctrlの状態が見えないものだから、スクロールしようとホイールを回して文字サイズが大きくなってはじめて気付くことになる。それにびくついてしまって Ctrl+Wを割り当てた中ボタンを使わずに右上の×印までポインタを持って行って閉じてみたり、中ボタンで閉じてから心配になって Ctrlキーをたたいてみたりして、いまいち手間を省けてなかった。
気づいたんだけどウィンドウを閉じてしまうようなキーストロークって使ってるのは Ctrl+Wだけで、その Ctrl+Wを送ってるのもエクスプローラと Firefoxと「その他すべてのプログラム」の 3つだけだった。
SendInputっていう APIを試してみたけど Ctrlが残るようなことは起こらなかった。で、ひとつの解決法。
#include <windows.h> #define numof(array) (sizeof(array)/sizeof(array[0])) int main() { INPUT inputs[] = { {INPUT_KEYBOARD}, {INPUT_KEYBOARD}, {INPUT_KEYBOARD}, {INPUT_KEYBOARD} }; inputs[0].ki.wVk = VK_CONTROL; inputs[0].ki.wScan = 0; inputs[0].ki.dwFlags = 0; inputs[0].ki.time = 0; inputs[0].ki.dwExtraInfo = NULL; inputs[1].ki.wVk = 'W'; inputs[1].ki.wScan = 0; inputs[1].ki.dwFlags = 0; inputs[1].ki.time = 0; inputs[1].ki.dwExtraInfo = NULL; inputs[2].ki.wVk = 'W'; inputs[2].ki.wScan = 0; inputs[2].ki.dwFlags = KEYEVENTF_KEYUP; inputs[2].ki.time = 0; inputs[2].ki.dwExtraInfo = NULL; inputs[3].ki.wVk = VK_CONTROL; inputs[3].ki.wScan = 0; inputs[3].ki.dwFlags = KEYEVENTF_KEYUP; inputs[3].ki.time = 0; inputs[3].ki.dwExtraInfo = NULL; SendInput(numof(inputs), inputs, sizeof INPUT); return 0; }
>cmd /V:ON >"C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\SetEnv.Cmd" /Vista /Release >cl "^W.cpp" /link /SUBSYSTEM:WINDOWS /nodefaultlib /entry:main user32.lib
うへっ、しょーもねー。(でも必要十分にして手放せない)
エクスプローラや Firefoxや SakuraEditorなどは OKなんだけど、気付いたところでは Hamanaだけが Ctrl+Wではなく Wというキーストロークが送られたとしか受け取ってくれない。ゲームとかハードウェアに近いレイヤーで入力を受け取ってそうなものが結構ダメかもしれない。わからんけど。そうだとしたら SetPointとしては無視できないよね。ゲームにキーストロークが送れないとか。(自分にとってはそのせいで抱え込む誤動作の方が無視できないわけだけど)
WSHで WScript.Shell.SendKeysを使えば、メモ帳だけで解決できる。たぶん起動時間は気にならない程度になっているだろう。
これだけ。
new ActiveXObject("WScript.Shell").SendKeys("^w");
これを ^W.jsとでも保存して SetPointでボタンに割り当てるだけ。拡張子が exeでないファイルはデフォルトでは表示されないが問題なく割り当てられるし実行もできる(少なくとも Vistaでは確認した)。これだけ簡単だと "^w" の部分をハードコードせずに、引数として任意のキーストロークを表す文字列を受け取りたくなるが、SetPointが引数付きでプログラムを起動してくれないのでできなかった。(ちなみに Alt+F4なら "%{F4}" になる)
気になる起動時間は、exeと遜色ないくらい一瞬だった。ちなみにマシンスペックは
Windows エクスペリエンス インデックス サブスコア | ||
プロセッサ | Athlon64 X2 3800+ | 4.8 |
メモリ(RAM) | DDR 2GiB | 5.5 |
1、2年前に既にこなれた値段で売られていたようなもの。
* JScript@WSHと C#@.NET1.0の起動に 20-30秒くらいかかっていた、メモリ 64MBのあの頃
http://www.mstarmetro.net/users/rlowens/?n=SetPoint.StuckModifiers に、これ以外の解決法が詳細にのっている。(1.AutoHotkeyを使用。2.uberOptionsを使用。3.user.xmlを直接編集)