2016-06-20

PowerShellでマウスポインタの座標を取得する

PowerShellでユーザーフォームを作っていると、ふと、マウスポインタの座標を取得したくなることがあります。

例えば、「コンテキストメニューを表示させるために座標を取得する」といった場合が当てはまります。

よって今回のテーマは「PowerShellでマウスポインタの座標を取得する」です。

<今回の完成品>


今回の完成品は、ボタンのみで構成されたフォームを使用します。
ボタンをクリックすると1秒ごとにマウスポインタの現在座標を取得し、コンソールに出力します。
10回取得を繰り返したところで終了します。

以下がスクリプトとなります。


# PowerShellでマウスポインタの座標を取得する

# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms

# フォームの作成・ボタンの作成
$form = New-Object System.Windows.Forms.Form
$form.Size = "200,200"
$form.StartPosition = "CenterScreen"

$Button = New-Object System.Windows.Forms.Button
$Button.Location = "50,50"
$Button.Size = "100,50"
$Button.Text = "クリック!"

# クリックイベント
$click = {
    for ( $a = 0 ; $a -lt 10 ; $a++ )
    {
        $x = [System.Windows.Forms.Cursor]::Position.X # マウスのX座標
        $y = [System.Windows.Forms.Cursor]::Position.Y # マウスのY座標
        Write-Host "マウスの現在座標は($x,$y)です"
        Start-Sleep(1)
    }
    Write-Host "終わり"
}
$Button.Add_Click($click)

$form.Controls.Add($Button)
$Form.Showdialog()
上記内容をコピーし、PowerShell ISEに貼り付け後、実行すると上の画像と同じものが表示されるはずです。

続いて解説をしていきます。

※過去の記事で解説した部分については割愛致します。  内容をご確認いただきたい場合は【ユーザーフォーム - 基礎編 -】をご覧ください。

* * * * * 解説 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ここではマウスポインタの座標取得の部分のみをピックアップします。
$x = [System.Windows.Forms.Cursor]::Position.X # マウスのX座標
$y = [System.Windows.Forms.Cursor]::Position.Y # マウスのY座標
Write-Host "マウスの現在座標は($x,$y)です"
マウスポインタの座標を取得するには、System.Windows.Forms.CursorクラスのPositionプロパティを利用します。

今回はわかりやすくX座標とY座標を分けて取得しましたが、次のように記述することで同時に取得することも可能です。
$p = [System.Windows.Forms.Cursor]::Position
このように記述した場合、{X=1000,Y=500} というように出力されます。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

解説は以上となります。

冒頭でも書きましたが、コンテキストメニューと組み合わせると便利&洒落た使い方ができると思います。
ぜひ一度、実装を検討してみてください。

=============================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!
=============================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/