2010-06-25 3 views
6

Я пишу приложение .NET с окном .NET на C#, которое запускает стороннее консольное приложение через класс Process, как можно более спрятано (CreateNoWindow , RedirectStandardOutput и т. Д.).Как отправить функцию keypress (F1..F12) в консольное приложение в .NET.

Я перенаправил его в StandardInput, поэтому я могу написать любую строку, которую я хочу, но не функциональные клавиши или другие специальные клавиши, так как они не имеют символьного представления. Что касается меня, я должен отправить ключи F1 в F4 в консольное приложение. Решения, которые я нашел, предназначены для оконного приложения (PostMessage, SendMessage).

Как это сделать для консольного приложения?

Есть ли какое-либо отношение к ручке процесса?

ответ

0

Sendkeys.SendWait может решить вашу проблему.

+0

SendKeys может отправлять только нажатия клавиш активному приложению, что, к сожалению, здесь не так. – ifroz

0

SendKeys работа ("{F1}")? (консоль должна быть активна, хотя).

+1

Сама консоль даже не существует как окно (Process.CreateNoWindow), поэтому SendKeys в этом случае неприменим. – ifroz

1

Вы не можете. Функциональные клавиши не могут работать с stdin, приложение должно вызывать ReadConsoleInput(), чтобы иметь возможность их обнаруживать. Это больше не работает, когда вы запускаете процесс без консольного окна.

+0

Невозможно переместить некоторые данные в буфер, который он читает, есть ли? – ifroz

+0

Нет окна консоли == нет буфера. –

+0

Я не покупаю этот ответ. Мое приложение прекращается, когда я нажимаю CTRL-BREAK, но у него нет такого вызова ReadConsoleInput, поэтому он не может иметь никакого отношения к нему. Так как консоль имеет возможность запускать процесс и посылать на него сигнал прерывания, я не вижу причин, по которым какое-то другое приложение, которое запускает процесс, не может отправить такой же сигнал. – Triynko

0

Это не прямой ответ на ваш вопрос, но вы считаете, что используете MSMQ?

Если ваше оконное приложение может получать эти нажатия клавиш, оно может передать этот факт вашему консольному приложению с использованием MSMQ. Возможно, вам не придется фактически передавать нажатие клавиши, только тот факт, что они были нажаты.

Я нашел это techrepublic article полезным в получении основ работы MSMQ.

 Смежные вопросы

  • Нет связанных вопросов^_^