Я использую 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 (он сам удалится).
Это без открытия нового окна.
Поскольку система по определению создает новый процесс с интерпретатором команд, вы не можете этого сделать.
Из темы MSDN system
Системная функция передает команду интерпретатору команд, который
выполняет строку как команду операционной системы.
Если вы хотите выполнить команду «dir», так как это встроенная команда в «cmd.exe» или какой-либо интерпретатор команд, который вы используете, довольно трудно «исправить» эту проблему — даже используя ShellExecute
или же CreateProcess
не очень поможет, так как вы получите окно в любом случае — оно может быть свернуто или что-то в этом роде, но оно все равно будет окном.
использование CreateProcess
или же ShellExecute
чтобы запустить процесс, вы можете передать параметры, связанные с окнами. то, что выполняет system (), обычно можно найти в окружении, getenv("ComSpec")
Я нашел это решение:
Для выполнения команд cmd без открытия окна я создаю файл bat (программа делает это), затем я использую этот код:
ShellExecute(NULL, "open", "Directory_Of_Bat_File", NULL, NULL, 0);
Это открывает файл bat и выполняет команды. Я также заметил, что вам не нужна система () для удаления файла bat, но вы можете удалить его, написав:
del Directory_Of_Bat_File
Внутри файла bat, и это удалит его, когда вы запустите файл bat (он сам удалится). Это без открытия нового окна.