Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: 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 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
14-1180
VID
2002-05-30 17:55
2002.07.01
Листок заказов на UBPFD.


1-966
HowTo
2002-06-19 17:46
2002.07.01
BMP vs JPEG and other


4-1242
MisterBin
2002-05-02 16:27
2002.07.01
Закрыть чужое окно при наведении на него мышкой


1-959
finger
2002-06-19 16:41
2002.07.01
Стыковка


1-970
MikeFW
2002-06-20 09:32
2002.07.01
TreeView. Хранение данных