Показать сообщение отдельно

Создаём скрытое консольное приложение
  #26  
Старый 28.02.2009, 20:44
jawbreaker
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
С нами: 9391926

Репутация: 234
По умолчанию Создаём скрытое консольное приложение

Эта мини-статья о том, как создать консольное приложение в Visual C++ так, чтобы оно не появлялось на экране.

Основной трюк здесь в структуре STARTUPINFO. Она содержит много параметров, из них нам нужны
PHP код:
DWORD cb
DWORD dwFlags
DWORD wShowWindow 
Сначала нужно объявить структуру и выделить для неё память:
PHP код:
STARTUPINFO StartupInfo;
memset(&StartupInfo0sizeof(StartupInfo));
ZeroMemory(&StartupInfosizeof(StartupInfo)); 
Теперь заполним структуру так, чтобы не показывать окно:
PHP код:
// Задаём размер структуры
  
StartupInfo.cb sizeof(STARTUPINFO);
  
  
// Установка параметров окна
  
StartupInfo.dwFlags STARTF_USESHOWWINDOW;

  
// HIDE - прячем окно
  
StartupInfo.wShowWindow SW_HIDE
Функция, которая принимает название программы для запуска из консоли и её аргументы:
PHP код:
DWORD RunSilent(charstrFunctcharstrstrParams)
{
    
STARTUPINFO StartupInfo;
    
PROCESS_INFORMATION ProcessInfo;
    
char Args[4096];
    
char *pEnvCMD NULL;
    
char *pDefaultCMD "CMD.EXE";
    
ULONG rc;
    
    
memset(&StartupInfo0sizeof(StartupInfo));
    
StartupInfo.cb sizeof(STARTUPINFO);
    
StartupInfo.dwFlags STARTF_USESHOWWINDOW;
    
StartupInfo.wShowWindow SW_HIDE;

    
Args[0] = 0;

    
pEnvCMD getenv("COMSPEC");

    if(
pEnvCMD){
        
        
strcpy(ArgspEnvCMD);
    }
    else{
        
strcpy(ArgspDefaultCMD);
    }

    
strcat(Args" /c "); 

    
strcat(ArgsstrFunct);  
    
strcat(Args" "); 
    
    
strcat(ArgsstrstrParams); 

    if (!
CreateProcessNULLArgsNULLNULLFALSE,
        
CREATE_NEW_CONSOLE
        
NULL
        
NULL,
        &
StartupInfo,
        &
ProcessInfo))
    {
        return 
GetLastError();        
    }

    
WaitForSingleObject(ProcessInfo.hProcessINFINITE);
    if(!
GetExitCodeProcess(ProcessInfo.hProcess, &rc))
        
rc 0;

    
CloseHandle(ProcessInfo.hThread);
    
CloseHandle(ProcessInfo.hProcess);

    return 
rc;
    

Пример:
PHP код:
int main()
{
    
DWORD a RunSilent("ipconfig"" > out.txt");
    return 
0;

создаст файл out.txt при этом ничего не выводя на экран.
 
Ответить с цитированием