Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Как показать окно процесса (http://forum.oszone.net/showthread.php?t=93961)

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.

Время: 15:25.
© OSzone.net 2001-