是否可以让 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 自动化……
…以及像 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