powershell - 使用 powershell(或其他非外部软件)进行鼠标单击自动化

标签 powershell automation mouse recorder

我的一些任务非常重复,有时我必须点击相同的模式一个小时。

这可以通过鼠标记录器轻松完成,但不幸的是我无法下载任何内容。我的计算机上预装了 PowerShell,因此这可能是一个选项(我过去曾成功地使用它来创建目录)。

因此,我的问题是如何制作 PowerShell 鼠标记录器(然后循环自动化)或使用其他预装软件。我正在运行 Windows 7。

最佳答案

假设您正在寻找鼠标记录器(又名鼠标宏,或类似的)。

相比之下,我使用 Windows PowerShell ISE 实现了您所寻求的东西,它不需要 d/l 和安装的麻烦:在 中打开一个空白项目PowerShell ISE 并添加以下代码...

首先,你需要设置你的环境

  • 通过导入几个系统程序集来设置环境——只需复制这两个程序集
    [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
    

  • 您的环境已准备就绪。

    现在,如何使用它
  • 通过输入以下命令获取屏幕上的鼠标/光标像素位置。
    $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(或其他非外部软件)进行鼠标单击自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38225874/

    相关文章:

    javascript - 是否可以从剧作家的定位器对象中获取选择器?

    c++ - 检查一个程序中是否所有 C++ 函数都抛出异常的工具

    keyboard-shortcuts - 使用 Karabiner-Elements 将应用程序键映射到插入符位置的右键单击

    jquery - 有没有办法用 jQuery 或 javascript 操纵鼠标位置

    powershell - 重复的命令行参数

    Powershell 中的 Excel 数据列表验证

    powershell - PowerShell WebRequest:发送中发生意外错误

    powershell - 如何将管道转换为CSV格式并指定UTF-8编码

    javascript - 使用javascript触发页面缩放事件

    java - 我如何需要在下拉菜单中正确选择项目?