Вниз
Скачать: CL | DM;

Диалоговое окно   Найти похожие ветки 

 
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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.008 c
4-1249
spiderman
2002-05-03 13:09
2002.07.01
Сообщение


3-929
Tutov Roman
2002-06-07 13:42
2002.07.01
Почему зацикливается этот кусок кода ?


1-1005
pavelB
2002-06-20 14:55
2002.07.01
пакеты


1-941
billybons
2002-06-19 09:43
2002.07.01
помогите плз - прога убиваться не хочет


7-1226
KPY
2002-04-02 11:49
2002.07.01
Com порт к вопросу о бите четности




   Наверх