C # - SendInput () из службы Windows не работает, но возвращает 1 - Win03 - PullRequest
1 голос
/ 22 ноября 2010

Это несколько необычная проблема. В настоящее время я работаю над тем, чтобы автоматизировать приложение Office. В основном проблема заключается в том, что мое приложение может правильно взаимодействовать с приложением Office, когда я запускаю свое приложение через RDP, но я не могу отправлять нажатия клавиш с помощью SendInput (), если я настроил приложение для вызова из службы Windows. ОС Win03 Std.

При порождении приложения из службы Windows я могу читать заголовки окон, автоматизировать через взаимодействие и т. Д., Как и ожидалось, через pinvoke, но сообщения SendInput (), по-видимому, исчезают, даже если вызов возвращает 1. Все I Я пытаюсь сделать на этом этапе отправить комбинацию клавиш в диалоговом окне.

Я пытался отправить нажатия клавиш как в виде виртуальных клавиш, так и в виде кодов сканирования.

Есть идеи или советы? Заранее спасибо!

(Кстати: я понимаю, что такого рода автоматизация не поддерживается и не разрешается MSFT.)

EDIT: На случай, если у кого-то еще есть эта проблема, это работает:

[DllImport("user32")]

public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);


bool returnVal = NativeWin32.PostMessage(popup, 0x0100, new IntPtr(0x1b), IntPtr.Zero);

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Я полагаю, что SendInput отправит ключи в текущее активное окно (или окно, которое имеет фокус).Как правило, службы Windows связаны с другим рабочим столом (это интерактивный рабочий стол) - поэтому приложение, запущенное из службы Windows, также будет связано с фоновым рабочим столом - поэтому нет активного окна (или окна с фокусом), и это может быть причиной того, что sendinout не работает,Возможно, вы можете попробовать имитировать нажатие клавиши, используя SendMessage или PostMessage - для этого вам понадобится дескриптор окна.

0 голосов
/ 22 ноября 2010

Начиная с Windows Vista, сервисам больше не разрешается взаимодействовать с рабочим столом.Это означает, что у них не будет рабочего стола для отправки событий клавиатуры.

...