適材適所

システム屋のくらげが気ままに書いているブログです。PowerShellやVBAなどプログラミング系の話をメインに書いています。

MENU

【PowerShell】メモ帳が暴れ回る最高のスクリプト

いつもまじめな話題だと飽きてしまうのでたまには肩の力を抜いたプログラムでも。

土曜日は面白いプログラムで疲れを癒しましょう。

UIAutomationとPowerShellを組み合わせて、メモ帳を所せましと暴れさせてみました。

目がちかちかする・・・。

f:id:shinmai_papa:20210930234044g:plain

検証した環境

Windows10

PowerShell5.1

ソース

PowerShellを起動して下記のコードを貼り付けてエンターを押すと暴れ出します。

PowerShellの起動方法はこちら⇒【PowerShell入門】PowerShellとは?【起動からコマンドの実行までを解説】 - 適材適所

UIAutomation+PowerShellの記事⇒【UI Automation,PowerShell】ウィンドウを移動・サイズを変更する最も簡単なプログラム - 適材適所

 
#ウィンドウの新しい幅 (ピクセル単位)
$width=300
#ウィンドウの新しい高さ (ピクセル単位)。
$height=300
#コントロールの左側の絶対画面座標。
$x=0
#コントロールの上部の絶対画面座標。
$y=0
Add-Type -AssemblyName UIAutomationClient
$notepad=Start-Process notepad -PassThru
Start-Sleep 1
$hwnd=$notepad.MainWindowHandle
#ハンドルからウィンドウを取得する
$window=[System.Windows.Automation.AutomationElement]::FromHandle($hwnd)
#ウィンドウサイズの状態を把握するためにWindowPatternを使う
$windowPattern=$window.GetCurrentPattern([System.Windows.Automation.WindowPattern]::Pattern)
#ウィンドウサイズを変更する準備としてサイズを通常に変更する
$windowPattern.SetWindowVisualState([System.Windows.Automation.WindowVisualState]::Normal)
#ウィンドウサイズを変更するためのパターン。
$transformPattern=$window.GetCurrentPattern([System.Windows.Automation.TransformPattern]::Pattern)
#Maximamだと移動もサイズ変更もできないので適当なサイズに変更する。
$transformPattern.Resize($width,$height)
#暴れる間隔
$sleep=0.5
#暴れる秒数
$duration=5
$startTime=Get-Date
while($true)
{
   Start-Sleep$sleep
   $transformPattern.Move($x,$y)
   $x=Get-Random -Maximum 1000 -Minimum 0
   $y=Get-Random -Maximum 1000 -Minimum 0
   $currentTime=Get-Date
   $durationMinute=($currentTime-$startTime).Seconds
   if(($durationMinute -ge $duration) -or $notepad.HasExited){
      Stop-Process $notepad
      return
   }
}

この辺りの変数の値を直すと暴れる時間や間隔をカスタマイズ?できます。

#暴れる間隔
$sleep=0.5
#暴れる秒数
$duration=5

終わりに

いきなり自分のPCでメモ帳が暴れ出したらびっくりしますよね。

くれぐれも誰かのパソコンに仕込んだりしてはいけませんよ!!悪用厳禁!!

というわけで、ぜひご自分のPCで試してみてください。

ここまでお読みいただき、ありがとうございました。