2016-11-23 3 views
0

У меня есть приложение, которое работает с использованием API автоматизации пользовательского интерфейса с другим приложением WPF. Я создал службу Windows, которые используют ту же функциональность, но когда служба пытается найти окно ВхШхГ он получает NULL:WPF UI Automation: от службы Windows

System.ArgumentException: HWND не может быть IntPtr.Zero или нулевым.
в System.Windows.Automation.AutomationElement.FromHandle (IntPtr HWND)
в MyService.Scheduler.GetNotificationWindow (IntPtr hWndtoolBar)

Можно ли использовать UI Automation API в службе Windows?

+1

Я не думаю, что это возможно или легко достичь из-за изоляции сеанса 0 (https://blogs.technet.microsoft. com/askperf/2007/04/27/application-compatible-session-0-isolation /) – lokusking

ответ

0

Служба Windows не имеет доступа к рабочему столу пользователя. См .: Interaction between Windows service and desktop application

Таким образом, короткий ответ: нет.

Решение может заключаться в том, чтобы служба «разговаривала» с процессом на рабочем столе через сокет, и этот процесс выполняет автоматизацию. (Это может привести к избавлению от службы и перемещению всей логики в настольное приложение)

+0

Я думал об обслуживании только потому, что он запускается при перезапуске ОС. Может быть, проще создать небольшую «тупую» службу, которая проверяет и запускает приложение, если оно неактивно. И это приложение использует API UIAtomation и работает как сейчас. – Oleg

+0

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

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