Пытаюсь добавить в свою программу функцию самоудаления, используя скрипт для cmd.exe, однако через CreateProcess запустить его не удается вот как пытаюсь это сделать: PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; memset(&sinfo, 0, sizeof(STARTUPINFO)); sinfo.cb = sizeof(sinfo); sinfo.wShowWindow = SW_HIDE; CreateProcess(NULL, "c:\\windows\\system32\\cmd.exe /c c:\\r.bat", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo); способ работает для всех программ, а вот с cmd.exe ничего не получается. В чем может быть дело?
Спасибо, уже сам решил проблему, программа не работала из-за флага DETACHED_PROCESS Встречный вопрос: а как скрыть оконное приложение пробую: PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; memset(&sinfo, 0, sizeof(STARTUPINFO)); sinfo.cb = sizeof(sinfo); sinfo.wShowWindow = SW_HIDE; CreateProcess(NULL, "c:\\windows\\system32\\notepad.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sinfo, &pinfo); Окно все равно появляется
deathwisher Если сильно нужно через CreateProcess, могу поковыряться в памяти, но я всегда использовал ShellExecute. Вот как это выглядит: ShellExecute(NULL,NULL,"c:\\windows\\system32\\notepad.exe",NULL,NULL,SW_HIDE);
Потому что наличие SW_HIDE в параметрах еще не означает, что окно будет скрыто при запуске. Используй ShowWindow
rmn Я вот немогу скрыть свое окно с помощью ShowWindow при прохождении WM_INITDIALOG и как мне быть? ____________________________________________________ Пардон, кому интересно, окно можно скрыть с помощью ShowWindowAsync.
Код (Text): case WM_PAINT: if (flag == FALSE) { ShowWindow(hwnd, SW_HIDE); flag = TRUE; } return TRUE; case WM_CLOSE: ............
deathwisher как скрыть оконное приложение Помимо STARTUPINFO.wShowWindow = SW_HIDE; необходимо STARTUPINFO.dwFlags = STARTF_USESHOWWINDOW;. Для console app это сработает, для gui гарантии нет, т.к. не каждое (зависит от разработчика) приложение пользуется этой информацией равно как и параметром nCmdShow.
В общем касательно вопроса как я понял мораль такова - гарантированное скрытие окна может обеспечить только нахождение его хэндла, и затем вызов ShowWindow. Но тогда есть вероятность, что окно некоторое время после запуска программы будет видно, т.е. "мигнет", а этого хотелось бы избежать.
Quantum берётся как раз из STARTUPINFO.wShowWindow В теории да. На практике - зависит от "стартап-кода". Например, в подавляющем числе примеров icztutes используется nCmdShow равное SW_SHOWDEFAULT, а в ShowWindow передается SW_SHOWNORMAL.
Как говорится, способов куча. Выбор же зависит только от степени вашей извращенности. Можно придавать окну отрицательные координаты к примеру. А можно пропатчить ф-цию ShowWindow для указанного приложения и заставить ее всегда скрывать требуемое окно. Но это уже из области API Hooking, а новичку такое - убицца веником(сам знаю!). Ну если уж так невтерпеж - читаем маны на этом прекрасном сайте: помогут - 100%