问题描述
我正在尝试模拟用户使用Powershell打开和关闭应用程序的操作。使用Sendkey,我可以导航到对话框中的所需选项卡。我想知道如何捕获当前关注的元素的值并将其写入变量。
预期输出:
在图像中,假定TAB笔划已进入“文件名”字段。现在,我想读取值“ Book1”并将其存储在变量$ FILE_NAME中,以进行进一步处理。
解决方法
Sendkeys(已内置到Windows中并且已经存在了几十年)或AutoIT或Selenium是用于UI自动化的工具。 对于Excel之类的目标,您需要知道Excel DOM才能使用它。
也请参阅此SO讨论,因为它与您的询问类似。
Send Keys in Powershell alt+n {TAB} {ENTER}
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("%n{TAB}{ENTER}")
重点:
Sendkeys存在其问题,这就是为什么您会看到人们抱怨它的原因,但是只要您了解它的局限性和性能考虑因素,它就可以工作。
另请参阅PowerShell Excel模块:
Find-Module -Name '*Excel*' | Format-Table -AutoSize
,PowerShell和Excel:是的,它们一起工作:https://adamtheautomator.com/powershell-excel-tutorial
视频:https://www.youtube.com/results?search_query=powershell+sendkeys+ms+excel
按照@postanote的建议,使用UI自动化工具可能会更好。无论如何,人们可以使用Get-Clipboard
和Windows的默认剪贴板快捷方式ctrl
+ c
。像这样
... # switch to Excel's dialog first
# Copy with ctrl+c
[System.Windows.Forms.SendKeys]::SendWait('^{c}')
# Save clipboard contents
$d = Get-Clipboard
write-host "From clip: $d"
# Output
From clip: Book1.xlsx