作成 2013.09.28
更新 2013.09.28
更新 2013.09.28
PowerShell でデスクトップ上のマウスカーソルの位置を取得する
追加アプリケーションをインストールできない環境で、GUI操作を自動化する際に作ったもの。
コード
mouse_trace.ps1
$provider = New-Object Microsoft.CSharp.CSharpCodeProvider
$params = New-Object System.CodeDom.Compiler.CompilerParameters
$params.GenerateInMemory = $True
$params.TreatWarningsAsErrors = $True
$refs = "System.dll","mscorlib.dll","System.Drawing.dll","System.Windows.Forms.dll"
$params.ReferencedAssemblies.AddRange($refs)
# C Sharp
$txtCode = '
using System;
using System.Drawing;
using System.Windows.Forms;
public class MouseTrace {
bool cap_stat = false;
Form f1 = new Form();
TextBox tb_x = new TextBox();
TextBox tb_y = new TextBox();
Button btn1 = new Button();
Label lbl1 = new Label();
Color c_on = Color.Green;
Color c_off = Color.Red;
System.Timers.Timer tm1 = new System.Timers.Timer(100.0);
public MouseTrace(){
Font font1 = new Font("MS ゴシック",16);
f1.Text = "Mouse Trace";
tb_x.Font = font1;
tb_x.Location = new Point(10,10);
tb_x.Text = "0";
tb_x.TextAlign = HorizontalAlignment.Center;
tb_x.Width = 100;
tb_y.Font = font1;
tb_y.Location = new Point(tb_x.Right+10,10);
tb_y.Text = "0";
tb_y.TextAlign = HorizontalAlignment.Center;
tb_y.Width = 100;
btn1.Location = new Point(10,tb_x.Bottom+10);
btn1.Text = "Mouse Capture";
btn1.Width = 110;
btn1.MouseClick += new MouseEventHandler(btn1_MouseClick);
lbl1.Location = new Point(btn1.Right+10,btn1.Top);
lbl1.Text = "Off";
lbl1.ForeColor = c_off;
lbl1.Font = font1;
f1.Size = new System.Drawing.Size(tb_y.Right+30,btn1.Bottom+50);
f1.Controls.Add(tb_x);
f1.Controls.Add(tb_y);
f1.Controls.Add(btn1);
f1.Controls.Add(lbl1);
tm1.Elapsed += new System.Timers.ElapsedEventHandler(WriteMousePosition);
}
public void Show(){
f1.ShowDialog();
}
private void WriteMousePosition(object source, System.Timers.ElapsedEventArgs e){
// 画面上の絶対座標
tb_x.Text = Cursor.Position.X.ToString();
tb_y.Text = Cursor.Position.Y.ToString();
}
private void btn1_MouseClick(object sender, MouseEventArgs e){
if(cap_stat){
lbl1.ForeColor = c_off;
lbl1.Text = "Off";
cap_stat = false;
tm1.Stop();
}else{
lbl1.ForeColor = c_on;
lbl1.Text = "On";
cap_stat = true;
tm1.Start();
}
}
}
'
$results = $provider.CompileAssemblyFromSource($params, $txtCode)
$results.Errors
$mAssembly = $results.CompiledAssembly
$i = $mAssembly.CreateInstance("MouseTrace")
$i.Show()
実行
ps1 ファイルを実行できるように設定しておく。
PS C:\> mouse_trace.ps1「Mouse Capture」をクリックすると実行開始。マウスカーソルがデスクトップ上のどこにあるか絶対座標を取得する。
タグ: PowerShell
CSharp