1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

wsh でマウス操作をする

Posted at

通常 wsh だけの機能ではマウスを操作することはできません。

手段としては EXCEL がインストールされていれば ExecuteExcel4Macro を呼び出して Win32API を叩けますが、
それ以外だと Win32API を叩く実行ファイルをダウンロードして、WScript.Shell から実行する方法しかありません。

.dll や .exe のダウンロードが厳しい場合は下記 C# を自身でコンパイルして実行ファイルを作成します。

mouse.cs
using System;
using System.Runtime.InteropServices;

namespace Device {
    public class Mouse {
        public static void Main (params string[] args) {
            string method = args[0];
            int posX = args.Length > 1 ? Int32.Parse(args[1]) : 0;
            int posY = args.Length > 2 ? Int32.Parse(args[2]) : 0;

            if (method == "pos") {
                SetCursorPos(posX, posY);
            }

            if (method == "click") {
                mouse_event(0x2, posX, posY, 0, 0);
                mouse_event(0x4, 0, 0, 0, 0);
            }

            if (method == "leftDown") {
                mouse_event(0x2, posX, posY, 0, 0);
            }

            if (method == "leftUp") {
                mouse_event(0x4, posX, posY, 0, 0);
            }

            if (method == "rightClick") {
                mouse_event(0x8, posX, posY, 0, 0);
                mouse_event(0x10, 0, 0, 0, 0);
            }

            if (method == "rightDown") {
                mouse_event(0x8, posX, posY, 0, 0);
            }

            if (method == "righttUp") {
                mouse_event(0x10, posX, posY, 0, 0);
            }
        }

        [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern void SetCursorPos(int X, int Y);

        [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
    }
}

こちらを

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:exe /out:mouse.exe .\mouse.cs

でコンパイルして

mouse.js
var Shell = WScript.CreateObject('WScript.Shell')

function SetCursorPos (x, y) {
    Shell.Exec('mouse pos 100 100')
}

function Click () {
    Shell.Exec('mouse click')
}

SetCursorPos(100, 200)
WScript.Sleep(500)
Click()

で操作できます。

もし .dll や .exe などの実行ファイルのダウンロードやコンパイルが出来ない環境の場合は
wes から C# を直接実行して操作ができます。

wes は WSH のスクリプトを今風の記述で開発できるフレームワークです。

  • require/module.exportsimport/export が記述でき、モジュール単位で開発可能
  • 一般的なファイル操作はビルトインモジュールで対応しているので「車輪の再開発」をしなくても良い
  • WSHのフレームワークなので、EXCEL などの COM 操作も従来通り可能
  • 外部パッケージをインストールすることも可能。

などの特徴があります。

wes の入手方法は wes から wes.js をコピーしてファイルを作成するか、
コンソールで次のコマンドを実行してください。

bitsadmin /TRANSFER GetWES https://raw.githubusercontent.com/wachaon/wes/master/wes.js %CD%\\wes.js

@wachaon/mouse をインストールします。
@wachaon/mouse は powershell を使用して先ほどの C# ファイルを実行します。
詳しくはソースを直接ご確認ください。

wes install @wachaon/mouse --bare
const mouse = require('mouse')

mouse.pos(100, 100)
mouse.click()

wes を使えば wsh だけでは解決が難しい問題も比較的簡単に処理できます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?