![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
Большое Вам спасибо, не знаю как Вас и отблагодарить! |