system () без приглашения, c ++, winmain

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

пример:

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

return 0;
}

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

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

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

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

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

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

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

del Directory_Of_Bat_File

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

2

Решение

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

Из темы MSDN system

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

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

2

Другие решения

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

0

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

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

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

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

del Directory_Of_Bat_File

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

0
По вопросам рекламы [email protected]