現在ノートPC+ディスプレイ2台で仕事してるんですが、マウスカーソルがしょっちゅう行方不明になるんですよね。。。
画面の端から端まで移動するのも大変だし。。。
いい加減面倒になってきたので、ショートカットキーでマウスカーソルを指定したモニターの中央に移動させるスクリプトを書いてみました。
マルチディスプレイ対応版です。
コードはこちら。
目次
手順
スクリプト書く
スクリプトはこんな感じ。
拡張子をps1にして保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# targetのモニター番号を引数で受け取る # 指定がなければ1 if($args.Length -eq 0){ $target = 1; } else { $target = $args[0] } # モニター情報取得 Add-Type -AssemblyName System.Windows.Forms $screens = [System.Windows.Forms.Screen]::AllScreens # 指定された番号が存在するモニターの数より多ければ1番として扱う if($target -gt $screens.count){ $target = 1 } # 配列が0始まりなので調整 $target = $target -1 # カーソルの位置調整 $width_center = $screens[$target].WorkingArea.X + ($screens[$target].WorkingArea.Width / 2) $height_center = $screens[$target].WorkingArea.Y + ($screens[$target].WorkingArea.Height / 2) # カーソル描画 # なぜか1回だけだと1(左端)→3(右端)の時だけwidthがおかしくなるので2回やる [System.Windows.Forms.Cursor]::Position = new-object System.Drawing.Point($width_center, $height_center) [System.Windows.Forms.Cursor]::Position = new-object System.Drawing.Point($width_center, $height_center) |
[System.Windows.Forms.Cursor]::Positionを2回やっているのは、1回だと特定のパターンの遷移をしたときになぜかwidthが足りなくなるから。
同じ値をセットしてるだけなんだけど…わからん。。。
ショートカットキーの設定
本来ショートカット作ってショートカットキーを設定すれば動くはずなんですが、なぜか動かない。。。
原因がわからないので諦めて、HotkeyPというフリーツールを使ってキーを設定していきます。
HotkeyPのダウンロード
リンク先から32bit(無印) or 64bitのzipをダウンロードします。
インストール不要なので、解凍したら好きな場所に置きましょう。
HotkeyP.exeをダブルクリックするとツールが起動します。
ショートカットキーの作成
作成後はこんな感じ。
Addボタンを押して新しくショートカットキーを追加します。
特定のモニターに移動させるなら1つだけでもOK。
モニター全台でやりたい場合は台数分作ってください。
入力は5ヶ所。
①キー指定
テキストボックスをクリックしてキーを入力します。
例えばCtrl + Alt + ↑を押すと、自動で左側にチェックが付きます。
単独のCtrlやShift、WindowsキーはすでにOSに使用されていることが多いので、Ctrl + Altがおすすめです。
②コマンド指定
PowerShell.exeと入力します。
③パラメーター指定
以下を入力します。
1 |
-ExecutionPolicy RemoteSigned -File 【スクリプトの絶対パス】 【モニターの番号】 |
【モニターの番号】には存在するモニターの数を1から連番で割り振ってください。
後述しますが、設定 > デバイス > ディスプレイ >ディスプレイの配置を変更する画面通りの番号にならない場合があるので適当でOKです。
④実行ウインドウの表示設定
実行するたびにウインドウが表示されると邪魔なので、minimizedを指定して最小化します。
⑤説明
任意。
なくても大丈夫です。
どのショートカットがどの画面に対応しているかはショートカットキーを実行して確認してください。
ショートカットキーを実行して動作を確認
設定が終わった後にショートカットキーを押すと、どこかのモニターの中央にカーソルが移動するはずです。
ショートカットキーとモニターの紐づきを確認したら、使いやすいように調整してください。
設定ファイルを保存してHotkeyPを閉じる
HotkeyPを終了するときに設定ファイルの保存ダイアログが表示されるので、HotkeyPのフォルダ内にでも保存しておいてください。
タスクトレイ常駐型で、次回からはPC起動時に一緒に起動されます。
マウスカーソルの設定を変更
初期設定だとカーソルが小さくてわかりにくいので、目立つように設定を変えます。
Windowsの設定 > デバイス > マウス画面で【マウスとカーソルのサイズを調整する】をクリックします。
ポインターのサイズを大きくして色を付けます。
どの色が目立つかはそれぞれの環境によると思いますが、どピンクあたりが背景が黒でも白でも目立つような気がします。
モニターの番号を適当に入力する理由
つまり番号を取得する方法がわからんってことなんですが。
この番号が何かというので、まず思い浮かぶのがディスプレイの設定画面の番号。
で、PowerShellでモニターの情報を取得するコマンドを打ってみると…。
設定画面の番号・配列に入ってくる順番・DeviceNameの番号
すべてがずれてます。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
PS C:\Users\hazhikko> [System.Windows.Forms.Screen]::AllScreens # 2番 BitsPerPixel : 32 Bounds : {X=0,Y=-1080,Width=1920,Height=1080} DeviceName : \\.\DISPLAY1 Primary : False WorkingArea : {X=0,Y=-1080,Width=1920,Height=1040} # 3番 BitsPerPixel : 32 Bounds : {X=1920,Y=-1080,Width=1080,Height=1920} DeviceName : \\.\DISPLAY2 Primary : False WorkingArea : {X=1920,Y=-1080,Width=1080,Height=1880} # 1番 BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=1920,Height=1080} DeviceName : \\.\DISPLAY3 Primary : True WorkingArea : {X=0,Y=0,Width=1920,Height=1040} |
じゃあこいつは何なのよってことで、MultiMonitorToolというのを使って詳細に調べてみると…。
設定画面に表示されていた番号はレジストリ内のDevice Keyのようです。
場所がわかれば取れるだろと思ったんですけど、Nameと紐づける方法がわからず。。。
このツールで取れてるんだから、やりようはあると思うんですけどねぇ。
さらに、モニターを外したり付けたりとしてるうちに、またずれてくる可能性もあるんだとか。
そんなのもう追えないので、力業で解決したということでしたw
できないところは運用でカバー!!
だれか解決法がわかれば教えてください…。