|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 10, 2004 11:16:01 Добрый день all. Решил написать программу, которая будет работать на своем десктопе (нечто вроде multydesk из winnt4rk). Собственно говоря - себе (своему приложению) я смог установить нужный мне десктоп, и работать на нем. Но теперь возникла необходимость приложениям которые я использую устанавливать мой десктоп. А именно - Internet Explorer-у. Но здесь возникла следующая проблема : 1) SetThreadDesktop не будет работать , если у потока уже есть окна на текущем десткопе. Помимо всего - он работает только для вызывающего потока. 2) SetProcessWindowStation работает только для вызывающего процесса. 3) Если я себе делаю SetThreadDesktop, то если потом делать ShellExecute из этого потока, то процесс создается на дефолтном юзерском десктопе. Может кто-нибудь подкинет идею как мне запустить процесс на нужном мне десктопе? Спасибо. |
|
|
Дата: Июл 10, 2004 14:07:08 В структуре STARTUPINFO есть поле lpDesktop, вроде это оно. |
|
|
Дата: Июл 10, 2004 16:27:01 Помню очень смутно, поэтому могу ошибиться. Где-то в MSDN была статья или цикл статей Keith Brown. И что-то там было про мигрирование на другие десктопы. Вроде у каждой WindowStation есть десктоп по умолчанию. Например "WinSta0\Default". И вроде как-то можно на него мигрировать. Попробуй посмотреть те статьи, может даст те чё. |
|
|
Дата: Июл 11, 2004 11:48:58 Правка Я не много знаю о таком, но: rst если у потока уже есть окна на текущем десткопе Закрыть их? SetProcessWindowStation работает только для вызывающего процесса Можно внедриться в адресное пространство целевого процесса. как мне запустить процесс на нужном мне десктопе CreateProcess(), заполняем lpDesktop, но в msdn сказано, что только на WinSta0 десктопы интерактивны, а на остальных — нет. Под интерактивностью понимается получение приложением событий от мыши, клавиатуры (пользовательский ввод) и ещё что-то. Подробнее в MSDN (About services->Interactive services), ссылку не помню. |
|
|
Дата: Июл 11, 2004 17:16:45 Вообще... // // If no desktop has been specified, use the caller's // desktop. // соответсвенно - я в основном потоке своего приложения делаю CreateDesktop и SetCurrentDesktop потом все, что вызывается через CreateProcess - выполняется на моем десктопе. Кстати. момент важный - именно CreateProcess а не ShellExecute ибо последний дает комманду эксплореру на выполнение, а не вызывает сам CreateProcess. Соответсвенно это будет выполнено на десктопе эксплорера. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076 |