2016-01-05 4 views
1

Как я могу ввести нажатие клавиши программно с помощью сценария PowerShell?Как отправить нажатие клавиши в исполняемый файл?

Write-Host -ForegroundColor Green 'Loading...' 

Function EnterKey { 
    [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') 
    #Where I want to get "|" keystroke programmatically 
    [System.Windows.Forms.SendKeys]::SendWait("{|}") 
} 

Function StartUp { 
    Write-Host "Environment" 

    $exe = ([IO.Path]::Combine("D:\7ZipApp\7ZipApp\7ZipApp\bin\Debug","7ZipApp.exe")) 
    & $exe 3 # argument 3 = 'Run local Sync' 
    EnterKey 
    Read-Host -Prompt $exe.ToString() 
} 

StartUp 
+0

Какова реальная проблема, которую вы пытаетесь решить? –

+0

Я хочу программным образом нажать «|» для исполняемого файла после того, как я передам аргументы, так что отправьте ключевой штрих в консоль exe. – Rayshawn

+2

Отправка нажатия клавиши на консольный исполняемый файл является хитом или пропуском. Было бы гораздо более надежным создать правильную командную строку '7z.exe', которая вместо этого не запрашивает и не запускает ее. –

ответ

1
Write-Host -ForegroundColor Green 'Loading...' 

function StartUp { 
    Write-Host 'Environment' 

    $exe = Join-Path "D:\7ZipApp\7ZipApp\7ZipApp\bin\Debug" "7ZipApp.exe" 
    #& $exe 3 # argument 3 = 'Run local Sync' 
    start $exe -ArgumentList 3 

    Write-Host 'Type {|} to continue' 
    while ((Read-Host) -ne '{|}') {} 

    Read-Host -Prompt $exe.ToString() 
} 

StartUp 
+0

Похоже, что это фактически открывает другое командное окно и не отправляет штрих ключа исполняемому файлу. – Rayshawn

1

Я должен идти с толпой здесь (с комментариями):

Я хотел бы отказаться от вашего подхода. Слишком проблематично.

Мой вопрос, почему вы хотите сделать это

Правильным решением, то, чтобы получить автор 7zipapp.exe, чтобы исправить программу, чтобы он перестает это делать или добавить параметр командной строки, предотвращает такое поведение.

Тем не менее, если вы хотите всего взломать, и эта программа занимает только один вход, в конце, предположительно, то ниже, кажется, работает. Я бы использовал экономно, возможно, никогда не использовал его, а скорее исправил программу, но в моем тестировании это сработало.

PowerShell:

$exe = 'C:\ConsoleApplication2\bin\Debug\ConsoleApplication2.exe' 
'\r\n' | & $exe 

раздражающий C# Программа:

using static System.Console; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WriteLine("I will force you to hit Enter to exit."); 
      ReadLine(); 
     } 
    } 
} 
Смежные вопросы