Сервисы Vista: Может ли форма показываться на невидимом рабочем столе? - PullRequest
0 голосов
/ 28 октября 2009

Я пытаюсь показать форму из службы в Vista (используя .NET winforms)

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

Однако эксперимент заключается в том, чтобы выяснить, можно ли "показать" невидимую форму и получить дескриптор окна и цикл сообщений

Я пытался, но когда я запускаю form.Show (), только событие form.Load не запускается .Shown или .FormClosing

Есть ли способ захвата сообщений Windows таким образом, как это делает пользовательское приложение?

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

1 Ответ

0 голосов
/ 29 октября 2009

Да, вы можете показать форму на рабочем столе службы. Он не будет показан ни одному вошедшему в систему пользователю, фактически в Vista и более поздних ОС вы не сможете показать его пользователю, даже если вы установите службу в «интерактивном» режиме. Поскольку рабочий стол не является интерактивным, сообщения Windows, которые получает форма, будут немного отличаться, но подавляющее большинство событий должно вызываться в службе так же, как и на интерактивном рабочем столе (я только что провел быстрый тест и получил форму загрузка, показ, активация и закрытие событий).

Следует помнить, что для показа формы ваш поток должен быть потоком STA и должен быть создан цикл сообщений либо путем вызова ShowDialog, либо Applicaton.Run. Кроме того, помните, что все внешние взаимодействия с формой необходимо маршалировать в нужный поток, используя Invoke или BeginInvoke в экземпляре формы.

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

...