![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте
Подскажите как отследить в своей программе закрытие чужой программы, например виндового блокнота? ![]() |
#2
|
||||
|
||||
![]() Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure CreateProcessAndWait(CommandLine: String); var startupinfoa: STARTUPINFO; processinformation: PROCESS_INFORMATION; begin ZeroMemory(@startupinfoa, SizeOf(STARTUPINFO)); startupinfoa.cb:=SizeOf(STARTUPINFO); startupinfoa.dwFlags:=STARTF_USESHOWWINDOW; startupinfoa.wShowWindow:=SW_SHOW; Windows.CreateProcess(nil, PChar(CommandLine), nil, nil, False, 0, nil, nil, startupinfoa, processinformation); WaitForSingleObject(processinformation.hProcess, INFINITE); CloseHandle(processinformation.hProcess); end; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add(DateTimeToStr(Now)); CreateProcessAndWait('notepad.exe'); Memo1.Lines.Add(DateTimeToStr(Now)); end; end. Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Спасибо за ответ!
Есть пища для размышления. Дело в том что не я запускаю процесс блокнота. Моя программа может только подключиться к уже созданному процессу. Как быть в этом случае? ![]() |
#4
|
||||
|
||||
![]() ну тогда, наверное, логично предположить, что вместо CreateProcess нужно использовать OpenProcess.
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() Пишу вместо Windows.CreateProcess
это: Windows.OpenProcess(PROCESS_QUERY_INFORMATION, False, processinformation.hProcess); Выдаёт ошибку: External exception C0000008 ![]() Хотя блокнот запущен |
#6
|
||||
|
||||
![]() ну не в буквальном же смысле понимать
![]() Код:
var hNotepad: THandle; hProcess: Cardinal; ProcessId: Cardinal; begin hNotepad:=FindWindow('Notepad', nil); if hNotepad>0 then begin GetWindowThreadProcessId(hNotepad, ProcessId); hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); WaitForSingleObject(hProcess, INFINITE); end; end; Пишу программы за еду. __________________ |
#7
|
|||
|
|||
![]() NumLock
Большое Вам спасибо, не знаю как Вас и отблагодарить! ![]() |