Войти

Показать полную графическую версию : [решено] Как показать окно процесса


EvgeniyQQQ
12-11-2007, 12:28
Добрый день. Написал сервис, который вызывает внешний процесс. При этом созданный процесс запускается скрытым (наследует какое-то свойство сервиса). Необходимо, показать этот процесс (его окно).
Делаю так:
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
Необходимо, показать этот процесс (его окно) »
...создаваемый процесс -- это GUI-приложение??
При этом созданный процесс запускается скрытым »
...можно конкретнее??Что значит скрытым??
Подскажите, пожалуйста, как показать окно процесса? »
...а почему нельзя запустить процесс с настройками по умолчанию, т.е. вообще не трогать структуру STARTUPINFO??

EvgeniyQQQ
12-11-2007, 17:24
...создаваемый процесс -- это GUI-приложение?? »
Да.
..можно конкретнее??Что значит скрытым?? »
Тоесть не отображается окно приложения.
..а почему нельзя запустить процесс с настройками по умолчанию, т.е. вообще не трогать структуру STARTUPINFO?? »
Можно. Я пробовал. Эффект тот же.

DillerInc
12-11-2007, 19:54
EvgeniyQQQ
Кстати,а функция CreateProcess точно возвращает единицу,иными словами,процесс создаётся??

Вот меня сейчас немного заинтересовал параметр lpEnviroment этой же функции.
If this parameter is NULL, the new process uses the environment of the calling process
...вот я правда не совсем представляю,как эти переменные окружения будут влиять на создаваемый процесс...

EvgeniyQQQ
13-11-2007, 15:46
DillerInc,
иными словами,процесс создаётся?? »
Да, процесс создается. Его можно увидеть через диспетчер задач.
CreateProcess() возвращает 1.

EvgeniyQQQ
14-11-2007, 16:03
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);
//...




© OSzone.net 2001-2012