Written in Japanese(UTF-8)
2021.11.09
INASOFT

/トップ/目次/管理人のひとこと/「マウスふるふる」の機能を実現するPowerShellスクリプトを作ってみる

3218228 (+0161)[+0314]

管理人のふたこと

「マウスふるふる」の機能を実現するPowerShellスクリプトを作ってみる



公開日:2020/05/15
更新日:2020/10/07 スクリプト保存時の文字コード指定 / 実行ポリシーの変更
更新日:2021/11/09 バッチファイルで実行する方法(内部にPowerShellスクリプトを埋め込む方式)

■マウスふるふるの機能をPowerShellで実現

マウスふるふるの先月分のダウンロード数が、先々月分に比べて2倍に伸びているようでした。

4月23日の管理人のひとことにも書きましたが、リモートワークブームのおかげで、なぜだかSNS上で本ソフトの話題をよく見かけるようになったというのも起因していそうです。リモートワークのお供として(ある意味)役に立つとみなされたこと、あるいはそういうことで有名になり、本ソフトの本来の目的(OSの設定を変える権限がなくてもスリープを抑止できるとか、設定を元に戻してしまうタイプの監視ソフトに対する対応策)で使っていただける方が多くなったか、といったところかと推測します。本ソフトは、前身のMOUSELRのころから数えて15年の歴史があるソフトなのですが、2020年になって、時代が本ソフトの需要を呼び起こしたといったところでしょうか。

ただ、上記のブログ記事にも書いた通り、インターネットからファイルをダウンロードすることが許されないとか、許可されたexe以外を実行できない環境があるとのこと。

許可されたexe以外が実行できない環境への対策として、簡易的なPowerShell版を公開しているわけですが、インターネットからファイルをダウンロードすることが許されないという方への対応のため、5月10日のブログでPowerShell版のスクリプトを掲載しています。

しかしながら、環境によっては「ブログを閲覧できない」という方もいらっしゃるとのことで、今回はこのページにスクリプトを掲載することにしましたので、コピペしてご利用ください。
(実行時に文字化けする or 実行できなくなるため、保存時に文字コードはShift_JISやBOM付UTF-8等にしてください。どうしてもうまくいかない場合は、日本語(漢字・ひらがな・カタカナ)で書かれた行をすべて削除してください)


# マウスふるふる(PowerShell版) ver.2.0  (C)2020 INASOFT/T.Yabuki
# 50秒おきに、マウスを微妙に左右に揺らし、スクリーン セーバー等への移行の阻止を試みます。
# Ctrl+C を押すか、[×]ボタンを押すと終了。

# .NETのCursorクラスを利用するためにSystem.Windows.Formsをロード
add-type -AssemblyName System.Windows.Forms

# mouse_event APIを利用するための準備
$signature=@' 
      [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
      public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@

$SendMouseEvent = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru

echo "Ctrl+Cで終了します。"

# マウス移動
$MOUSEEVENTF_MOVE = 0x00000001

# スリープ秒数
$SleepSec = 50

# マウスの振れ幅
# ・マウスの移動イベント生成用の振れ幅
$MoveMouseDistance = 1
# ・マウスの座標を左右にずらす用の振れ幅
$MoveMouseDistanceX = 1

# 偶数回数目は左へ、奇数回数目で右へずらすためのフラグ
$Flag = $true

# 永久ループ
while ($true) {
    # スリープ
    Start-Sleep $SleepSec

    # 現在のマウスのX,Y座標を取得
    $x = [System.Windows.Forms.Cursor]::Position.X
    $y = [System.Windows.Forms.Cursor]::Position.Y

    # マウス座標を少しずらす(マウスイベントを監視するOS(スクリーンセーバー、スリープ)対策)
    $SendMouseEvent::mouse_event($MOUSEEVENTF_MOVE, -$MoveMouseDistance, 0, 0, 0)

    # マウス座標を少し右にずらす(マウスイベントを監視するOS(スクリーンセーバー、スリープ)対策)
    $SendMouseEvent::mouse_event($MOUSEEVENTF_MOVE, $MoveMouseDistance, 0, 0, 0)

    # 座標を監視するアプリ対策(座標を左か右に1ピクセル分ずらすだけにする)
    if ($Flag) {
        $x += $MoveMouseDistanceX
        $Flag = $false;
    }
    else {
        $x -= $MoveMouseDistanceX
        $Flag = $true
    }
    [System.Windows.Forms.Cursor]::Position = new-object System.Drawing.Point($x, $y)
    $x = [System.Windows.Forms.Cursor]::Position.X
    $y = [System.Windows.Forms.Cursor]::Position.Y
}

(実行時に文字化けする or 実行できなくなるため、保存時に文字コードはShift_JISやBOM付UTF-8等にしてください。どうしてもうまくいかない場合は、日本語(漢字・ひらがな・カタカナ)で書かれた行をすべて削除してください)


上記の内容をmousefr.ps1というファイル名で保存します。この際、文字コードはShift_JISやBOM付UTF-8等とします。
例えば、「メモ帳」にコピー&ペーストして保存する場合、保存ダイアログで文字コードが指定できる場合はANSI(日本語環境ではShift_JISを意味する)を指定します。

PowerShellスクリプトの保存方法

エクスプローラから実行する場合は、マウスで右クリック→「PowerShellで実行」で実行してください。
(ユーザーのログイン時に実行したい場合は、スタートアップフォルダにショートカットファイルを作るなどします)

PowerShellの実行方法

このような画面が出たら実行開始です。50秒おきに非常にわずかにマウスが左右に揺れます。[×]ボタンを押すか、このウィンドウをアクティブにしてCtrl+Cを押すと終了します。

実行画面

もし、次のようなメッセージが出てきた場合は、「Y」を入力します。

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):

上記のメッセージが毎回表示されたくない場合は、Windows PowerShellを実行し、実行ポリシーを変更してください。
例えば次のコマンドをPowerShell上から実行すると、現在ログインしているユーザーは、ローカルで作成されたPowerShellスクリプトを実行可能になります(ダウンロードしたスクリプトには署名が必要です)。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser



■バッチファイルで実行する方法(内部にPowerShellスクリプトを埋め込む方式)

上記の実行ポリシーの確認対策や、ps1ファイルの実行ができない環境への対応などを目的としてバッチファイルの中にPowerShellスクリプトを埋め込む方法があるということを教わりました。

上記サイト中にある、最初の「方法1.スクリプトブロックとして実行」に書かれた部分を冒頭に書き、あとは上記のスクリプトを書いて、拡張子batで保存すればよいだけとなります。(文字コードはShift-JISで保存してください)

ダウンロードページからダウンロードできるようにしてあります。

実行画面



本ページへは、自己責任の範囲内であれば自由にリンクしていただいて構いません。
本ページに掲載されている内容は、自由にお使いいただいて構いませんが、必ずしも筆者が内容を保証するものではありませんので、ご利用に際しては自己の責任においてお使いいただきますよう、お願いいたします。
このページのURLやアンカーは、サーバ運営・サイト運営・ページ運営・その他の都合により無告知で一時的あるいは永遠に消滅したり、変更したりする可能性がありますので、あらかじめご了承下さい。
本ページは、公開から1年半経過後の任意のタイミングで削除される予定です。本ページの内容は複製・公開していただいて構いません。
最近、このページのスクリプトを、コメントを変更しただけの状態(著作権情報も削除された状態)で丸々コピーしただけの記事をqiitaやnoteに掲示している方を見かけました(いちおう、参考元として、当サイトのURLを示していただけておりました)。当ページの内容は自由に利用していただけることになっていますので、(存在意義については理解できないものの)法的には特に問題ありません。ただ、独自のコメントを付けるつもりで、間違えたコメントを付けている状態が見受けられましたので、せめてそのあたりはきちんとしていただきたいと思います。


/トップ/目次/管理人のひとこと/「マウスふるふる」の機能を実現するPowerShellスクリプトを作ってみる