2013-12-21 4 views
0

Есть ли другой способ отправить нажатия клавиш в приложение?Sendkeys Powershell не работает должным образом

У меня есть сценарий Powershell, после нажатия клавиши backtick консоль должна открываться в приложении, но этого не происходит, но при нажатии на клавиатуру физический способ работает отлично.

После того, как я сам открываю консоль, sendkeys работают, но первые sendkeys (backtick) не работают.

Что мне нужно, так это то, что скрипт открывает консоль, отправив ключ обратной линии.

# 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}") 

ответ

0

Первого вопрос, который я вижу, вы не ссылки на 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") 

"Подождите" или 'wait3' не ps1 метод, попробуйте Start-Sleep 1

Start-Sleep 1 
Start-Sleep 3 
+0

, как для кавычки, я не могу найти какой-либо документацию банкомат SendKeys этой кнопки. Но здесь хорошо читаем о том, как нам избежать этого. http://www.rlmueller.net/PowerShellEscape.htm –

+1

Я думаю, что SendKeys зависит от ваших настроек региона (раскладка клавиатуры), поэтому это может различаться. Я создаю backtick, удерживая shift, нажимая '\' и занимая пространство, поэтому для его создания я буду использовать: '[System.Windows.Forms.SendKeys] :: SendWait (" + \ ")'. '+' означает сдерживание сдвига –

0

, как кавычка специальный символ, попробуйте использовать двойные обратные кавычки. один за побег с другой стороны, таким образом:

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

0

кавычкой является маскирующим в двойных кавычках. Вместо этого вы должны использовать строку с одним кавычком, так как содержимое строк с одной кавычкой интерпретируется буквально. Кроме того, вам не нужны скобки вокруг строки.

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

Смотрите также:

help about_Quoting_Rules 
help about_Escape_Characters 
Смежные вопросы