Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1207
Sergo
2002-05-31 14:04
2002.07.01
ЛЮДИ Я СДАЛ КАНДИДАТСКИЙ ПО ФИЛОСОФИИ!!! :))


14-1169
MaximatorVeter
2002-05-22 18:34
2002.07.01
Подкиньте работу!


14-1204
Olivka
2002-05-31 20:32
2002.07.01
Дистрибутив ИЕ


3-905
Egor111
2002-06-06 11:48
2002.07.01
Access


4-1259
XEL
2002-04-26 23:27
2002.07.01
Как определить серийный номер ЧИСТОГО cd-r диска





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский