Как настроить таргетинг на виртуальный рабочий стол с помощью сообщения sendkey в C #? - PullRequest
1 голос
/ 07 января 2012

Допустим, я установил http://technet.microsoft.com/en-us/sysinternals/cc817881

Я хочу иметь возможность отправлять сообщения с помощью Win32 API, но нацеливаться на второй виртуальный рабочий стол, пока я останусь на первом виртуальном рабочем столе.

Как это сделать в c #?

Обновление: для контекста я хотел бы автоматизировать ручное задание в фоновом режиме с периодическим интервалом в приложении, которое будет находиться на втором виртуальном рабочем столе, пока я работаю на первом рабочем столе.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Ссылка, которую вы предоставляете, описывает инструмент, основанный на встроенном механизме рабочего стола Windows.

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

Это - ссылка на MSDN на использование Desktop API, которая, помимо прочего, объясняет проблемы с разрешениями и т. Д., Связанные с таким мероприятием.

Единственный способ добиться того, чего вы хотите в этой ситуации, - это создать службу Windows, которая, в свою очередь, отслеживает запуск / выключение рабочего стола.

В случае запуска рабочего стола вам нужно запустить процесс внутри этого рабочего стола. Этот процесс должен предлагать какой-то не зависящий от рабочего стола механизм IPC, такой как TCP / IP или глобальный мьютекс + глобальная общая память или аналогичные ...
Вы общаетесь с этим процессом, и этот процесс делает все, что вам нужно (SendMessage, SendKeys ...) внутри этого рабочего стола от вашего имени.

2 голосов
/ 07 января 2012

SendKeys и SendMessage - это очень разные вещи.Совершенно неясно, какой вы используете.

Вы не можете "нацелить" что-либо с помощью SendKeys.Единственный объект, который может получать ввод с клавиатуры и мыши в Windows, - это окно с фокусом.Поскольку что-то, отображаемое на виртуальном рабочем столе, не будет иметь фокусировки, вы не сможете сделать это.

Вы можете , однако используйте функцию SendMessage для отправки окнасообщения в любое окно.Функция SendMessage принимает в качестве первого параметра дескриптор интересующего окна (HWND).Не имеет значения, является ли это окно сфокусированным, активным, отображаемым на виртуальном рабочем столе или чем-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...