Ccmmutty logo
Commutty IT
3 min read

PowerShellを利用してマウスカーソルの移動範囲を制限する

https://cdn.magicode.io/media/notebox/blob_o0R8RWO

はじめに

デュアルディスプレイ環境で10秒間マウスの移動範囲をディスプレイ2に制限するプログラムを書きます。

プログラム

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# カーソルの移動範囲をディスプレイ2に制限
$all_screens = [System.Windows.Forms.Screen]::AllScreens
$display2_workingarea = $all_screens.Where({$_.DeviceName.Contains('DISPLAY2')}).WorkingArea
[System.Windows.Forms.Cursor]::Clip = $display2_workingarea

Sleep 10

# カーソルの移動制限を解除
[System.Windows.Forms.Cursor]::Clip = [System.Drawing.Rectangle]::Empty;

解説

まず $all_screens = [System.Windows.Forms.Screen]::AllScreens で、システム上のすべてのディスプレイの配列を取得します。次に、$all_screens.Where({$_.DeviceName.Contains('DISPLAY2')})'DISPLAY2' を名前に含む Screen クラスを取得します。Screen クラスはディスプレイの作業領域を表す WorkingArea プロパティを持っています。ここで、マウスカーソルの移動範囲を制限するために Cursor クラスの Clip プロパティを使用します。Screen.WorkingArea, Cursor.Clip プロパティともに値は Rectangle であるため、[System.Windows.Forms.Cursor]::Clip = $display2_workingarea とすることでカーソルの移動範囲を制限することが出来ます。
カーソルの移動制限を解除するときは、空の Rectangle である Rectangle.Empty を設定します。

まとめ

同様の動きをするフリーソフトは巷に溢れていますが、意外と自作プログラムでも数行で実装できました。

Discussion

コメントにはログインが必要です。