【问题标题】:How to send keyboard input only to a specific application如何仅将键盘输入发送到特定应用程序
【发布时间】:2021-12-25 15:26:45
【问题描述】:

我对 Powershell 很陌生。我写了一个简单的脚本,基本上是在我离开电脑时在视频游戏中自动打磨。我想知道是否有办法将按钮“定位”到特定的窗口/应用程序/等。同时仍在其他窗口中的同一台机器上工作。就目前而言,我必须让游戏窗口专注于脚本才能工作,所以它只有在我 AFK 时才真正有用。但是,如果我可以让它在后台运行,同时处理其他有用的事情。

$WShell = New-Object -Com Wscript.Shell
while (1) {sleep 1; [System.Windows.Forms.SendKeys]::SendWait("{LEFT}"*80); 
[System.Windows.Forms.SendKeys]::SendWait("{RIGHT}"*80);sleep 1; 
[System.Windows.Forms.SendKeys]::SendWait("{C}"*20)}

由于我是 Powershell 新手,我不确定这是否可行。如果不是,那没问题,这是一个非常无聊的用例,我只是好奇。

【问题讨论】:

    标签: powershell automation


    【解决方案1】:

    想想你目前在做什么。 . .这几乎与将鞋带系在一双鞋上一样,只是穿上不同的鞋带;)您没有在脚本中的任何地方使用$wShell

    。 . .但是,你已经快到了。我们可以从加载所需的程序集开始,然后让它指向您要与之交互的应用程序:

    Add-Type -AssemblyName Microsoft.VisualBasic
    Add-Type -AssemblyName System.Windows.Forms
    
    [Microsoft.VisualBasic.Interaction]::AppActivate('Notepad')
    Start-Sleep -Milliseconds 1000
    
    [System.Windows.Forms.SendKeys]::SendWait("H")
    Start-Sleep -Milliseconds 100
    [System.Windows.Forms.SendKeys]::SendWait("E")
    Start-Sleep -Milliseconds 100
    [System.Windows.Forms.SendKeys]::SendWait("L")
    Start-Sleep -Milliseconds 100
    [System.Windows.Forms.SendKeys]::SendWait("L")
    Start-Sleep -Milliseconds 100
    [System.Windows.Forms.SendKeys]::SendWait("O")
    

    记下[Microsoft.VisualBasic.Interaction]::AppActivate('Notepad') 中的记事本,因为它将是您尝试与之交互的任何程序。在这种情况下,您只是向已经启动的记事本发送“HELLO”。

    【讨论】:

    • 这与我正在寻找的非常接近,但仍然存在将击键仅限于“AppActivate”中的应用程序的问题。如果我单击该特定应用程序并进入另一个应用程序以在其他地方工作,则击键将在新应用程序中继续,而不是在激活的应用程序中。我希望让 AppActivate 中的应用程序在我在另一个窗口中工作时在后台接收击键。不幸的是,这并没有做到这一点。我可以在 '[System.Windows.Forms.SendKeys]::SendWait("H")' 中添加一些内容以将其仅定向到特定的应用程序吗?
    • 你切换的窗口是同一个应用吗?
    • 不,它们可能是 Word、Chrome 等。我一次只有一个应用程序需要发送密钥来运行。
    • @Abraham 谢谢你!这让我通过了一个没有内置静默参数的程序的伪静默安装
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多