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


Вот когда отвожу мышку в сторону:

]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;I
]&#244;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.49 MB
Время: 0.009 c
2-1134412154
vpavel
2005-12-12 21:29
2006.01.01
Запрет CTRL+ALT+DEL на XP


5-1119862403
Radgar
2005-06-27 12:53
2006.01.01
Создание компонентов


14-1133889193
Kerk
2005-12-06 20:13
2006.01.01
Самый слабый по составу чемпионат мира в истории


8-1122063113
Retryator
2005-07-23 00:11
2006.01.01
Графические Аппертуры


2-1134659544
kalim
2005-12-15 18:12
2006.01.01
Ado connection





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский