使用 powershell(或其他非外部软件)实现鼠标点击自动化
Mouse Click automation with powershell (or other non-external software)
我的一些任务非常重复,有时我不得不点击相同的模式一个小时。
这可以通过鼠标记录器轻松完成,但不幸的是我无法下载任何东西。我的计算机上预装了 PowerShell,所以这可能是一个选项(我过去曾成功地使用它来制作目录)。
因此,我的问题是如何制作 PowerShell 鼠标记录器(然后循环自动执行)或使用其他预装软件。我是 运行 windows 7.
假设您正在寻找鼠标记录器(又名鼠标宏或类似软件)。
相比之下,我使用 Windows PowerShell ISE 实现了您的目标,无需 d/l & 安装的麻烦:在 PowerShell ISE[ 中打开一个空白项目=60=] 并添加以下代码...
首先,您需要设置环境
通过导入几个系统程序集来设置环境——只需复制这两个
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
通过调用 user32.dll 并在其中调用鼠标单击事件来创建一个数组。 注意:如果您希望发送鼠标单击事件,这很重要。否则,您的鼠标将继续改变其位置,但不会点击任何地方。 (可以找到更多信息here。)
$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);
'@
您现在必须添加一个名为鼠标事件数组列表的类型。
$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru
您的环境已准备就绪。
现在,如何使用它
通过输入以下命令获取屏幕上的 mouse/cursor 像素位置。
$X = [System.Windows.Forms.Cursor]::Position.X
$Y = [System.Windows.Forms.Cursor]::Position.Y
Write-Output "X: $X | Y: $Y"
在上面的命令中,您只是获取光标的 X 和 Y 位置。请注意,您可能需要多次执行此步骤才能获得鼠标像素,例如您希望鼠标光标移动和单击的位置。
一旦您记下了您希望执行鼠标点击的所有位置,现在就可以进行设置了。
$x = 86
$y = 172
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)
sleep -Seconds 01
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
现在,当您准备好所有需要执行点击的 $X 和 $Y 位置后,在 PowerShell ISE 中编辑并重复上述代码。每次,将 $X 和 $Y 值替换为您希望悬停或单击的值。
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
将执行左键单击。
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
将执行左键向上单击。
因此,如果您希望执行双击,只需调用这些行两次,就像这样。
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
这听起来可能是一个过时的过程,但它确实有效。我发现它在没有其他第三方工具可供我使用的情况下非常有用。正如您所指出的,PowerShell 是预装的。
我的一些任务非常重复,有时我不得不点击相同的模式一个小时。
这可以通过鼠标记录器轻松完成,但不幸的是我无法下载任何东西。我的计算机上预装了 PowerShell,所以这可能是一个选项(我过去曾成功地使用它来制作目录)。
因此,我的问题是如何制作 PowerShell 鼠标记录器(然后循环自动执行)或使用其他预装软件。我是 运行 windows 7.
假设您正在寻找鼠标记录器(又名鼠标宏或类似软件)。
相比之下,我使用 Windows PowerShell ISE 实现了您的目标,无需 d/l & 安装的麻烦:在 PowerShell ISE[ 中打开一个空白项目=60=] 并添加以下代码...
首先,您需要设置环境
通过导入几个系统程序集来设置环境——只需复制这两个
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
通过调用 user32.dll 并在其中调用鼠标单击事件来创建一个数组。 注意:如果您希望发送鼠标单击事件,这很重要。否则,您的鼠标将继续改变其位置,但不会点击任何地方。 (可以找到更多信息here。)
$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); '@
您现在必须添加一个名为鼠标事件数组列表的类型。
$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru
您的环境已准备就绪。
现在,如何使用它
通过输入以下命令获取屏幕上的 mouse/cursor 像素位置。
$X = [System.Windows.Forms.Cursor]::Position.X $Y = [System.Windows.Forms.Cursor]::Position.Y Write-Output "X: $X | Y: $Y"
在上面的命令中,您只是获取光标的 X 和 Y 位置。请注意,您可能需要多次执行此步骤才能获得鼠标像素,例如您希望鼠标光标移动和单击的位置。
一旦您记下了您希望执行鼠标点击的所有位置,现在就可以进行设置了。
$x = 86 $y = 172 [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y) sleep -Seconds 01 $SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0); $SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
现在,当您准备好所有需要执行点击的 $X 和 $Y 位置后,在 PowerShell ISE 中编辑并重复上述代码。每次,将 $X 和 $Y 值替换为您希望悬停或单击的值。
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
将执行左键单击。
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
将执行左键向上单击。
因此,如果您希望执行双击,只需调用这些行两次,就像这样。
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
这听起来可能是一个过时的过程,但它确实有效。我发现它在没有其他第三方工具可供我使用的情况下非常有用。正如您所指出的,PowerShell 是预装的。