2

我是powershell的新手,我正在尝试编写一个自动点击器。到目前为止,我有这个代码:

Add-Type -MemberDefinition '[DllImport("user32.dll")] public static extern void mouse_event(int flags, int dx, int dy, int cButtons, int info);' -Name U32 -Namespace W;

function click {
    [W.U32]::mouse_event(2,0,0,0,0);
    [W.U32]::mouse_event(4,0,0,0,0);
}

$i = 10

while ($i -ge 0) {
    Write-Host "$i clicks remaining"
    Start-Sleep -m 1000
    click
    Write-Host "Clicked!"
    $i -= 1
}

问题是,当我运行脚本时,它只执行第一次单击,然后就挂起。

输出只是:

10 clicks remaining

只有当我按下 Ctrl+C 时,脚本才会进入循环的下一次迭代。

10 clicks remaining
Clicked!
9 clicks remaining

我根本不明白我做错了什么。

4

1 回答 1

2

问题很可能是当您运行脚本时,如果鼠标指针恰好位于控制台窗口的客户区域上方,则您的鼠标单击意外地暂停了正在运行 PowerShell 的控制台窗口中的处理。

(左)单击控制台窗口使其处于选择模式(用于将屏幕内容复制到剪贴板),并且隐式挂起正在运行的外壳/程序;任何按键(仅修饰符除外) - 例如您的情况下的 Control-C - 退出此模式。

如果您将鼠标指针从控制台窗口移开,然后启动您的脚本,您的脚本将运行完成。

请注意,点击可能会激活不同的窗口,如果该窗口与控制台窗口重叠,则点击将继续遮挡(部分)您的控制台窗口。要消除这种影响,请先隐藏控制台窗口以外的所有窗口。

于 2020-10-15T14:00:48.363 回答