Почему service application не может создавать окна?
От: alis Россия  
Дата: 02.09.04 20:10
Оценка:
Cервис в VC++ на API. Во время его работы создаю окно — RegisterClassEx, CreateWindowEx, ShowWindow. Ни одна из функций ошибки не возвращает, но окна нет, а куда пропадает в этот момент фокус — не ясно Сую этот же код в WinMain — вот оно окошко, все работает. Я так понимаю, я попадаю не на рабочий стол, а в другое пространство, в то, в котором находится SCM. У кого-нибудь есть научное объяснение??? И как это обойти?

Спасибо.
Re: Почему service application не может создавать окна?
От: Alex Fedotov США  
Дата: 02.09.04 22:19
Оценка:
Здравствуйте, alis, Вы писали:

A>Cервис в VC++ на API. Во время его работы создаю окно — RegisterClassEx, CreateWindowEx, ShowWindow. Ни одна из функций ошибки не возвращает, но окна нет, а куда пропадает в этот момент фокус — не ясно Сую этот же код в WinMain — вот оно окошко, все работает. Я так понимаю, я попадаю не на рабочий стол, а в другое пространство, в то, в котором находится SCM. У кого-нибудь есть научное объяснение??? И как это обойти?


Q171890 INFO: Services, Desktops, and Window Stations
Q327618 INFO: Security, Services and the Interactive Desktop
-- Alex Fedotov
Re: Почему service application не может создавать окна?
От: Bork СССР  
Дата: 02.09.04 22:19
Оценка:
Здравствуйте, alis, Вы писали:

A>Cервис в VC++ на API. Во время его работы создаю окно — RegisterClassEx, CreateWindowEx, ShowWindow. Ни одна из функций ошибки не возвращает, но окна нет, а куда пропадает в этот момент фокус — не ясно Сую этот же код в WinMain — вот оно окошко, все работает. Я так понимаю, я попадаю не на рабочий стол, а в другое пространство, в то, в котором находится SCM. У кого-нибудь есть научное объяснение??? И как это обойти?


A>Спасибо.


А сервису надо явно разрешить возможность взаимодействия с десктопом. Например через Control Panel.
Re: Почему service application не может создавать окна?
От: khSergey Россия  
Дата: 04.09.04 19:00
Оценка:
Большое спасибо! Работает:

SetProcessWindowStation(OpenWindowStation("Winsta0", FALSE, WINSTA_READSCREEN));
SetThreadDesktop(OpenDesktop("default", NULL, FALSE, DESKTOP_CREATEWINDOW));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.