Форум: "WinAPI";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
ВнизДиалоговое окно Найти похожие ветки
← →
Nimbus (2002-04-30 23:08) [0]Знатоки Delphi, подскажите, plz:
посылаю сообщение DOS приложению, работающему в оконном режиме:
PostMessage(hWnd,WM_CLOSE,0,0)
после этого "вылазит" это диалоговое окно "End Program - "имя"", в котором можно выбрать: "End now" или "Cancel"
ПРИМЕЧАНИЕ: приложение запускаю функцией CreateProcess(), причём оно работает в собственной NTVDM и если вместо PostMessage(hWnd,WM_CLOSE,0,0) сделать TerminateProcess(), то я убиваю ТОЛЬКО cmd.exe процесс, а NTVDM остается запущенной вместе с DOS приложением (Norton Commander, DOS Navigator и т.п.).
Как же всё-таки завершить подобные приложения, чтобы они не задавали "лишних вопросов"?????? Заранее благодарен.
Кстати, в NT4.0 после следующего кода:
PostMessage(hWnd,WM_CLOSE,0,0);
PostMessage(hWnd,WM_QUIT,0,0);
подобные приложения убивались без проблем!!??
← →
Rush (2002-05-01 16:20) [1]
CreateProcess(..., pi );
Zzzzzz....
TerminateProcess( pi.hProcess )
CloseHandle(pi.hProcess)
А если там чего и остаётся - не обращай внимания :)
← →
Nimbus (2002-05-01 20:38) [2]Спасибо, Rush!
Но это не совсем ответ на мой вопрос.... Если последовать твоему совету, то (в Win2k, по крайней мере) NTVDM продолжит свою работу вместе с DOS Navigator"ом (Norton Commander"ом или т.п.), а убивается ТОЛЬКО "cmd.exe"!!! В принципе, можно убить и процесс NTVDM, зная его дескриптор - hProcess (это тоже не проблема), но как узнать, что это NTVDM, созданная ИМЕННО моим CreateProcess(), потому что их может "висеть" в памяти 2..3..5..10!!??? А чтобы не обьяснять это на пальцах всё-таки приведу пример своего кода - попробуй и узнаешь, что в данном примере TerminateProcess НЕ ВАРИАНТ!!!!!
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.lpTitle := PChar("Norton Commander");
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_NORMAL;
if CreateProcess(nil,PChar("nc.exe"),nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,
StartupInfo,ProcessInfo) then
begin
//....
//....произвожу некоторые действия
//....
WaitforSingleObject(ProcessInfo.hProcess,60000); //ждём 60 секунд
TerminateProcess(ProcessInfo.hProcess,0);
CloseHandle(ProcessInfo.hProcess);
end
end
Если есть другие идеи, буду ОЧЕНЬ ПРИЗНАТЕЛЕН!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c