2015年12月09日

マウスをアクティブウインドウの位置に追従させるUWSCスクリプト



ノートPCのマウスって使いにくいですよね。

以前、マウスの移動のロギングツールを入れてチェックしたところ、PCを操作している時間の3割近くをマウス移動に費やしてました。

 移動は価値を生まない!!

ということで、マウスを使うのを極力やめたのは過去記事でご紹介しました。

 マウスを外してPCを使うと操作が早くなる

それでも、マウスを使わないといけないアプリは多いですし、移動距離も端から端まで移動させるためには、結構な手間がかかります。
ノートだと、タッチパッド(クリックパッド)をスリスリして、面倒くさい事この上ない。

■マウスを自動的に移動させるツール


Windowsのマウスの設定を開いてみると、「自動的にディフォルトボタンに移動させる」という機能があるので、これはいつもONにして使っているのですが、ボタンなら通常はショートカットキーで選択できるようになってますので、実際はあまり効果がありませんでした。

ほとんどのマウス移動は、リボンのボタンをクリックするとか、表示されている文字を選択するとかの作業です。
こうした、使いたいところにマウスが行く機能というのはフリーソフトでもあまり見かけません。
※私が知らないだけかもしれませんので、ご存じの方はぜひ教えて下さい。

 ないものは作ってしまおう

ということで、ウインドウを監視して、ウインドウが切り替わったら、そのウインドウの真ん中辺りにマウスカーソルを移動させるツールを作ってみました。

このプログラムはUWSCで作成されていて、起動すると自分のウインドウを見えなくして無限ループします。
終了させるためには、ALT+F2キーを押すと終了します。

以下の部分をコピペして、適当なフォルダに適当に名前をつけて保存してください。拡張子は uws で。
そのあと、UWSC にこれを起動させる(.uws を UWSC に関連付けておくとダブルクリックだけで起動できます)と、常住します。

試しに、ALT+TAB でウインドウを切り替えてみてください。
マウスカーソルがリボンのあたりに飛んでいきます。もし、マウスカーソルがそのウインドウの範囲内にあれば何もしません。

★――――――――――――――――――――――――――
// マウスカーソルをアクティブウインドウの上側(リボンのあたり)
// に移動させるプログラム
//
// 行頭の //d はデバッグ用コード。有効にすると、現在の関係情報をログに出力する
// 途中でウインドウタイトルを変えるものにも反応する
CTRLWIN(GETID(GET_THISUWSC_WIN), HIDE) //UWSCを非表示

// メイン処理
//
sPrevWin = "" // 直前に開いていたウインドウの名前
while (1) // 無限ループ
CTRLWIN(GETID(GET_LOGPRINT_WIN), CLOSE) // UWSC log ウインドウを非表示

nID = GETID(GET_ACTIVE_WIN)
sWin = STATUS(nID, ST_TITLE)
ifb sPrevWin <> sWin then
// アクティブウインドウが変わったら、マウスを自動的に
// そのウインドウの中央に持っていく
mx = G_MOUSE_X
sleep(0.1)
if G_MOUSE_X = mx and POS("-", sWin) > 1 then
// アクティブウインドウが Windows 本体("-" がない)でなく
// ますが移動していなければ、マウスポインタの移動操作をする
//d print "Changed active:" + sPrevWin + " -> " + sWin
//d print "mousX: org:" + G_MOUSE_X + " -> pos:" + STATUS(nID, ST_CLX) + " wid:" + STATUS(nID, ST_CLWIDTH)
//d print "mousY: org:" + G_MOUSE_Y + " -> pos:" + STATUS(nID, ST_CLY) + " wid:" + STATUS(nID, ST_CLHEIGHT)
ifb G_MOUSE_X < STATUS(nID, ST_CLX) or G_MOUSE_X > STATUS(nID, ST_CLX) + STATUS(nID, ST_CLWIDTH) then
MMV(STATUS(nID, ST_CLX)+STATUS(nID, ST_CLWIDTH)/2, STATUS(nID, ST_CLY)+STATUS(nID, ST_CLHEIGHT)/20)
elseif G_MOUSE_Y < STATUS(nID, ST_CLY) or G_MOUSE_Y > STATUS(nID, ST_CLY) + STATUS(nID, ST_CLHEIGHT) then
MMV(STATUS(nID, ST_CLX)+STATUS(nID, ST_CLWIDTH)/2, STATUS(nID, ST_CLY)+STATUS(nID, ST_CLHEIGHT)/20)
endif
endif
sPrevWin = sWin
endif
sleep(1) // 1秒に1回だけ実行する
wend
――――――――――――――――――――――――――★


私の環境ではとりあえずまともに動いてますので、もしよろしかったら使ってみてください。

◆問題点


どうも、UWSC の MMV 関数でマウスカーソルを移動させると、直前まであったマウスカーソルの描画が残ってしまいます。
なので、これを使うと、マウスカーソルの残骸が元の位置に残ります。
※つまり、2つとか3つのマウスカーソルが表示された状態になる

これを消す方法をご存知であれば、教えてください。



posted by 管理人 at 05:06| Comment(0) | TrackBack(0) | PCアプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック