Powershell 脚本“物理地”写入文本

Powershell 脚本“物理地”写入文本

是否可以让 powershell 在窗口中写入某些内容,这意味着无论鼠标停在哪里,它都会将其写入该窗口中,如果它在网络浏览器中或应用程序中等?

我正在考虑尝试编写一个脚本,它可以读取请求中所述的内容,然后从那里开始。

它看起来像这样:

$test = "write this text"

Add-Type -TypeDefinition $cSource -ReferenceAssemblies System.Windows.Forms,System.Drawing

  Start-Sleep -Seconds 1

[Clicker]::LeftClickAtPoint(900,900)

  Start-Sleep -Seconds 1
Write-Content "$test"

我找不到是否存在用于此的 cmdlet。

答案1

您在这里要求的是 GUI 自动化。这不是 PS 的目标用例。因此,没有用于此的内置 cmdlet,也没有名为 Write-Content 的 cmdlet 或函数。您可以自行获取的最接近的方法是使用旧的 SendKeys 选项。

# Send output to Notepad and view it wihtout creating a file first.
# Start notepad
Notepad 

# Get a list of servics and put on the clipboard
Get-Service | Clip

# Put the clipboard content in the notepad instance
## .NET:
[void][reflection.assembly]::loadwithpartialname("system.windows.forms")
[system.windows.forms.sendkeys]::sendwait('^v')

但是,这确实不可靠,因为不同的 CPU、显卡和尝试跨平台一致地使用它确实会造成麻烦。我曾经这样做过,现在仍然在小型本地主机上这样做,我绝对知道它会如何流动。

您可以下载并使用一些模块来协助实现 GUI 自动化……

https://archive.codeplex.com/?p=wasp

https://archive.codeplex.com/?p=uiautomation

…以及像 AutoIT 这样的第三方工具。

尽管如此,您仍然需要努力弄清楚要访问哪个窗口、UI 元素的位置等。这类事情需要 C# 和其他 API 调用来确保您可以获得这些内容。

网络上有很多关于此类努力的讨论,以及在此过程中经历的痛苦/失败/成功。只需搜索“PowerShell SendKeys”或“PowerShell GUI 自动化”,您就会立即看到这些内容。

最后,所有这些 GUI 内容,即您尝试处理鼠标点击事件、鼠标悬停事件、鼠标悬停事件等,在大多数情况下,实际上只能由您亲自编写的应用程序实现,除非应用程序提供商公开/向您提供了执行此操作的 API 信息。

这里有一个 SO 讨论,强调了我在这里所说的内容,应该会引起您的兴趣。

如何在 powershell 中发送鼠标点击

https://stackoverflow.com/questions/39353073/how-i-can-send-mouse-click-in-powershell

根据评论/请求更新

不用担心。

Codeplex 已经存在了很长一段时间,但不再有任何活动。因此有了存档内容。Codeplex 上的所有内容都已复制/托管到 GitHub 和类似位置。

您要加载哪个模块?

理想情况下,您希望将其放置在用户配置文件模块位置中......

C:\Users\YourUserName\Documents\WindowsPowerShell\Modules

..但你可以把它放在两者中。

有时,我的模块无法按预期自动加载,因此,我只是通过配置文件配置或使用该模块的脚本手动加载它们。

Import-Module -Name ModuleName

或者

Import-Module -Name C:\Users\YourUserName\Documents\WindowsPowerShell\Modules\ModuleName

相关内容