2013-06-30 2 views
2

Я использую C++, и у меня есть программа, которая работает с winmain. Я не хочу, чтобы вызов system() открыл и закрыл окно.system() без подсказки, C++, winmain

пример:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
    system("dir > nul 2> nul"); 

    return 0; 
} 

Я хочу использовать системные вызовы, но я не хочу, чтобы открыть новое окно.

Заранее спасибо.

редактировать:

Я нашел это решение:

Чтобы выполнить CMD команды без открытия окна я создать биту файл (программа делает это), то я использую этот код:

ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0);

Это открывает файл bat и выполняет команды. Я также заметил, что вам не нужно система(), чтобы удалить файл летучей мыши, но вы можете удалить его, написав:

del Directory_Of_Bat_File 

Внутри файл летучей мыши, и это будет удалить его, когда вы запустите файл биты (она удалит себя). Это без открытия нового окна.

+0

Если у вас есть решение, разместите его как ответ, а не редактируйте его в свой вопрос. (Да, вы можете ответить на свой вопрос, вы даже можете принять свой собственный ответ, если это лучшее решение вашей проблемы.) –

ответ

0

Я нашел это решение:

Чтобы выполнить CMD команды без открытия окна я создаю биту файл (программа делает это), то я использую этот код:

ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0); 

Это открывает файл летучей мыши и выполняет команды. Я также заметил, что вам не нужно система(), чтобы удалить файл летучей мыши, но вы можете удалить его, написав:

del Directory_Of_Bat_File 

Внутри файл летучей мыши, и это будет удалить его, когда вы запустите файл биты (она будет удалите себя). Это без открытия нового окна.

0

Используйте CreateProcess или ShellExecute, чтобы запустить процесс, там вы можете передать параметры, связанные с окнами. какая система() может быть найдена в среде, getenv("ComSpec")

2

Поскольку система по своему определению создает новый процесс с помощью командного интерпретатора, вы не можете этого сделать.

От субъекта MSDN system

Функция система переходит команду интерпретатора команд, который выполняет строку в качестве команды операционной системы.

Если вы хотите сделать «Dir», так как это встроенная команда в «cmd.exe» или каким-либо интерпретатор команд вы используете, это довольно трудно «исправить» эту проблему - даже с помощью ShellExecute или CreateProcess не поможет, потому что вы получите окно в любом случае - это может быть сведено к минимуму или что-то в этом роде, но оно все равно будет там.

+0

Есть ли другой способ использовать команды cmd, такие как del, не открывая новое окно? –

Смежные вопросы