EvgeniyQQQ |
12-11-2007 12:28 677251 |
Как показать окно процесса
Добрый день. Написал сервис, который вызывает внешний процесс. При этом созданный процесс запускается скрытым (наследует какое-то свойство сервиса). Необходимо, показать этот процесс (его окно).
Делаю так:
Код:
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
ZeroMemory( &m_pi1, sizeof(m_pi1) );
CreateProcess( NULL, wcmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &m_pi1);
//...
Увы окно приложения не появляется. Подскажите, пожалуйста, как показать окно процесса?
Как я понял, у приложения запускаемого как сервис, есть ряд ограничений. Где бы об этом почитать?
|
DillerInc |
12-11-2007 15:15 677386 |
Цитата:
Цитата EvgeniyQQQ
Необходимо, показать этот процесс (его окно) »
|
...создаваемый процесс -- это GUI-приложение??
Цитата:
Цитата EvgeniyQQQ
При этом созданный процесс запускается скрытым »
|
...можно конкретнее??Что значит скрытым??
Цитата:
Цитата EvgeniyQQQ
Подскажите, пожалуйста, как показать окно процесса? »
|
...а почему нельзя запустить процесс с настройками по умолчанию, т.е. вообще не трогать структуру STARTUPINFO??
|
EvgeniyQQQ |
12-11-2007 17:24 677483 |
Цитата:
Цитата DillerInc
...создаваемый процесс -- это GUI-приложение?? »
|
Да.
Цитата:
Цитата DillerInc
..можно конкретнее??Что значит скрытым?? »
|
Тоесть не отображается окно приложения.
Цитата:
Цитата DillerInc
..а почему нельзя запустить процесс с настройками по умолчанию, т.е. вообще не трогать структуру STARTUPINFO?? »
|
Можно. Я пробовал. Эффект тот же.
|
DillerInc |
12-11-2007 19:54 677550 |
EvgeniyQQQ
Кстати,а функция CreateProcess точно возвращает единицу,иными словами,процесс создаётся??
Вот меня сейчас немного заинтересовал параметр lpEnviroment этой же функции.
Цитата:
Цитата MSDN
If this parameter is NULL, the new process uses the environment of the calling process
|
...вот я правда не совсем представляю,как эти переменные окружения будут влиять на создаваемый процесс...
|
EvgeniyQQQ |
13-11-2007 15:46 678088 |
DillerInc,
Цитата:
Цитата DillerInc
иными словами,процесс создаётся?? »
|
Да, процесс создается. Его можно увидеть через диспетчер задач.
CreateProcess() возвращает 1.
|
EvgeniyQQQ |
14-11-2007 16:03 678818 |
DillerInc, спасибо за участие.
Нашёл ответ на просторах интернета.
Нужно было указать запускаемому процессу, что его окно принадлежит текущему рабочему столу.
Код:
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
si.lpDesktop = _T("Winsta0\\default"); //Необходимо добавить вот это параметр !!!
ZeroMemory( &m_pi1, sizeof(m_pi1) );
CreateProcess( NULL, wcmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &m_pi1);
//...
|
Время: 15:25.
© OSzone.net 2001-