Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизКак узнать запущен процесс или нет? Найти похожие ветки
← →
MAXHO © (2005-12-17 10:16) [0]Здраствуйте.
Подскажите как можно узнать запущен процес или нет? Например программа следит за тем, что если приложение myapp.exe нету среди запущеных процессов то запускать его.
← →
The_scorpion © (2005-12-17 11:17) [1]Нужно сделать мгновенный снимок памяти(CreateToolhelp32Snapshot ).
И просмотреть все процессы в этом снимки(Thread32First,Thread32Next), если ты не найдешь в нем myapp.exe, то запустишь его.
З.Ы. Если приложение myapp.exe написано тобой, то это упростит задачу.
← →
MAXHO © (2005-12-17 11:58) [2]Спасибо.
А можно кусок кода? :)
← →
The_scorpion © (2005-12-17 14:16) [3]Блин...я такой бред написал...не Thread32First,Thread32Next, а Process32Next и Process32First
Запросто:
SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);
ppe.dwSize:=sizeof(TProcessEntry32);
Process32First(SH, PPE);
Num:=0;
for i:=0 to 259 do
Full_Path[Num]:=Full_Path[Num]+PPE.szExeFile[i];
Exe_Name[Num] := ExtractFileName(Full_Path[Num]);
while Process32Next(SH, PPE) do
begin
inc(Num);
for i:=0 to 259 do
Full_Path[Num]:=Full_Path[Num]+PPE.szExeFile[i];
Exe_Name[Num] := ExtractFileName(Full_Path[Num]);
end;
В Exe_Name будут имена всех процессов.
← →
MAXHO © (2005-12-17 14:28) [4]Благодарю :)
← →
Pazitron_Brain © (2005-12-17 15:02) [5]Можно и проще:
if FindWindow(nil, "myapp") <> 0 then // ищет программу по заголовку окна
ShowMessage("Myapp запущен!")
else
WinExec("myapp", SW_Restore);
← →
The_scorpion © (2005-12-17 15:09) [6]
> FindWindow
Это если имя окна совпадает с именем программы, что бывает не часто
...а знаешь, есть программы у которых окон вообще нет?
З.Ы. Смотрю я сейчас на имена процессов на своей машине и на имена их окон...и совпадений не вижу...:)))
← →
MAXHO © (2005-12-17 15:20) [7]Проблема
Поставил это дело все на таймер, для проверки все процессы вывожу в ЛистБокс. Все нормально, но как только делаю что-то нарпимер отвожу мышку в сторону так появляються какието иерогливы, в чем проблема может быть?
← →
Pazitron_Brain © (2005-12-17 15:22) [8]
function IsRunning(sName: string): boolean;
var
han: THandle;
ProcStruct: PROCESSENTRY32; // from "tlhelp32" in uses clause
sID: string;
begin
Result := false;
// Get a snapshot of the system
han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if han = 0 then
exit;
// Loop thru the processes until we find it or hit the end
ProcStruct.dwSize := sizeof(PROCESSENTRY32);
if Process32First(han, ProcStruct) then
begin
repeat
sID := ExtractFileName(ProcStruct.szExeFile);
// Check only against the portion of the name supplied, ignoring case
if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
begin
// Report we found it
Result := true;
Break;
end;
until not Process32Next(han, ProcStruct);
end;
// clean-up
CloseHandle(han);
end;
← →
Pazitron_Brain © (2005-12-17 15:23) [9]MAXHO © (17.12.05 15:20) [7]
А как ты выводишь список в лист бокс?
← →
Pazitron_Brain © (2005-12-17 15:25) [10]или вот:
// Получение снимка состояния системы
hSnapshot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
// Получене инфоpмации о пеpвом пpоцессе в списке
Process32First();
// Получение инфоpмации о следующем пpоцессе в списке
Далее в цикле Process32Next();
← →
MAXHO © (2005-12-17 15:25) [11]Вот вроде нормально выводит
Memo1
System
smss.exe
csrss.exe
winlogon.exe
services.exe
lsass.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
spoolsv.exe
mdm.exe
svchost.exe
explorer.exe
ctfmon.exe
ISATRAY.EXE
alg.exe
Radmin.exe
HPBPRO.EXE
Icq.exe
msmsgs.exe
MyIE.exe
delphi32.exe
Project1.exe
Вот когда отвожу мышку в сторону:
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
]ôI
← →
MAXHO © (2005-12-17 15:26) [12]
> Pazitron_Brain © (17.12.05 15:23)
> А как ты выводишь список в лист бокс?procedure TForm1.Timer1Timer(Sender: TObject);
Var
SH: THandle;
ppe: TProcessEntry32;
Num, i: Integer;
Full_Path, Exe_Name: array[0..259] of string;
begin
ListBox1.Clear;
SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);
ppe.dwSize:=sizeof(TProcessEntry32);
Process32First(SH, PPE);
Num:=0;
for i:=0 to 259 do
begin
Full_Path[Num]:=Full_Path[Num]+PPE.szExeFile[i];
Exe_Name[Num] := ExtractFileName(Full_Path[Num]);
end;
while Process32Next(SH, PPE) do
begin
inc(Num);
for i:=0 to 259 do
Full_Path[Num]:=Full_Path[Num]+PPE.szExeFile[i];
Exe_Name[Num] := ExtractFileName(Full_Path[Num]);
ListBox1.Items.Add(Exe_Name[Num]);
end;
i:=0; Num:=0;
CloseHandle (SH);
end;
← →
Digitman © (2005-12-17 15:30) [13]
> Поставил это дело все на таймер
Для НТ есть более подходящий способ слежения за старт/стопом процессов
Он базируется на ф-ции режима ядра KeSetProcessNotifyRoutine, которая немедленно известит о произошедшем событии в списке активных процессов.
На wasm.ru на эту тему есть соотв.статья и демо-проект.
← →
The_scorpion © (2005-12-17 15:31) [14]
> Вот когда отвожу мышку в сторону:
А мышка тут причем?
← →
MAXHO © (2005-12-17 15:40) [15]Вот я и спрашиваю, все работает до тех пор пока курсором мышки не проводишь над формой прям мистика какаято. :)
← →
The_scorpion © (2005-12-17 16:01) [16]
> Вот я и спрашиваю, все работает до тех пор пока курсором
> мышки не проводишь над формой прям мистика какаято. :)
У меня все работает, проверил.
Попробуй уменьшить интервал таймера.
← →
MAXHO © (2005-12-17 16:14) [17]Можешь скинуть свой код7 Может я нахимичил не то что-то...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c