интеграция инструментов с драйвером графического интерфейса - PullRequest
0 голосов
/ 20 января 2010

У меня есть этот старый исполняемый файл на Фортране, доступ к которому можно получить только через его графический интерфейс, и он слишком сложен для перезаписи. Мне нужно интегрировать его в инструмент, который мы создаем, поэтому я написал оболочку GUI на C #, используя библиотеку White (конечно, не идеально, но я не мог придумать лучшего подхода). Это работает нормально, но когда моя программа запускается, появляется GUI, и определенные действия (например, выбор списка) вызывают движение мыши. Мне бы хотелось, чтобы взаимодействие с инструментом Fortran было прозрачным для пользователя.

Я прочитал пару постов здесь о функции CreateDesktop в dll user32, которая может позволить мне запускать оболочку в другом окне рабочего стола, которое пользователь не видит. Смогу ли я по-прежнему автоматизировать взаимодействие с графическим интерфейсом на таком рабочем столе? Я искал вокруг, не нашел примеров использования рабочего стола, созданного таким образом. У кого-нибудь есть хорошая ссылка для этого?

В качестве альтернативы, есть ли лучший способ выполнить этот процесс?

1 Ответ

1 голос
/ 20 января 2010

Настольные компьютеры - это, вероятно, хороший способ достичь того, чего вы хотите.

Рабочие столы могут быть невидимыми, что позволяет партнерам по автоматизации манипулировать пользовательским интерфейсом без риска фокусировки ввода или поведения всплывающих окон.

Рабочие столы представляют собой логический макет экрана с нуля или более Windows на нем. В Win32 доступно несколько методов API для управления рабочими столами и взаимодействия с ними, включая (среди них) CreateDesktop().

Каждый рабочий стол имеет имя (например, «По умолчанию», «WinLogon», «MyOwnName») и существует как элементы в Window Station, в результате чего появляются полные имена, такие как «WinSta0 \ Default». Рабочие столы были представлены в NT 3.10. Дескрипторы окон, оконные сообщения, «оконные крючки» и т. Д. Все находятся на одном рабочем столе и не могут пересекать эту границу. Однако можно выполнить одноранговую автоматизацию (например, такую, как вы описали в библиотеке White) на другом рабочем столе, чем тот, на котором работает ваше приложение.

В отличие от сеансов и оконных станций, каждый поток в процессе может быть подключен к другому рабочему столу в WinStation своего процесса, и эта связь может быть изменена на лету в любом потоке, у которого нет окон (даже не скрытых). из них). В плане безопасности у каждого рабочего стола есть свой дескриптор безопасности. Вы можете получить дескриптор рабочего стола вашего собственного процесса, вызвав GetThreadDesktop (), для других задач интересными являются API OpenDesktop () и OpenInputDesktop () и CreateDesktop ().

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