Sendkeys Powershell无法正常工作

irtuqstp  于 2023-02-16  发布在  Shell
关注(0)|答案(3)|浏览(227)

是否有其他方法将击键发送到应用程序?
我有这个Powershell脚本,按下反勾键后,控制台应该在应用程序中打开,但这并没有发生,但按下键盘的物理方式,它的工作完美。
在我自己打开控制台后,sendkey可以工作,但第一个sendkey(反勾)不工作。
我需要的是脚本通过发送反勾键打开控制台。

# startpwsscrip.ps1

function wait {
  param([int]$stop = 8)
  Start-Sleep -seconds $stop
}

[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
& "$env:C:\Program Files (x86)\Steam\SteamApps\common\Half-Life\cstrike.exe"
$a = Get-Process | Where-Object {$_.Name -eq "Counter-strike"}
wait3
$Cursor = [system.windows.forms.cursor]::Clip
[System.Windows.Forms.Cursor]::Position = New-Object system.drawing.point(509,763)
wait
[System.Windows.Forms.SendKeys]::SendWait({"ENTER"})
wait
[System.Windows.Forms.SendKeys]::SendWait({"`"})
wait
[System.Windows.Forms.SendKeys]::SendWait("connect ")
wait
[System.Windows.Forms.SendKeys]::SendWait("192.168.1.1")
wait
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
nzrxty8p

nzrxty8p1#

我看到的第一个问题是,您没有引用System.Windows.Forms,并且在VisualBasic引用中有一个额外的单引号,这不太好。

add-type -AssemblyName System.Windows.Forms

#or

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

在这里加单引号。

("'Microsoft.VisualBasic")
# should be one or the other
('Microsoft.VisualBasic')
("Microsoft.VisualBasic")

“等待”或“等待3”不是ps1方法,请尝试启动-休眠1

Start-Sleep 1
Start-Sleep 3
cgvd09ve

cgvd09ve2#

因为反勾号是一个特殊的字符,尝试使用两个反勾号。一个用于转义另一个,如下所示:

[系统.窗口.窗体.发送键]::发送等待(“''”)

p8h8hvxi

p8h8hvxi3#

倒勾是双引号字符串中的转义字符。您应该使用单引号字符串,因为单引号字符串的内容是按字面解释的。此外,您不需要在字符串两边使用大括号。

[System.Windows.Forms.SendKeys]::SendWait('`')

另见:

help about_Quoting_Rules
help about_Escape_Characters

相关问题