Ĺadny brzuch
Mam takie pytanie? Jak sprawdzić czy w tej chwili jest uruchomoiny program, np: jakis.exe. I Jeśli jest to jak go zamknąć. Zakładam, że znam do niego ścieżke. np: C:\Program Files\Program\jakis.exe
Prosze o pomoc
Witam
Kod na 100% działa na Windows 98, niestety w systemach opartych na NT nie zawsze "zabjanie" procesu działa.
//Do uses dodaj TLHelp32 //ProcessPath: string - sciezka i nazwa programu //ProcInfo: TProcessEntry32 - Tu zwracane sa podstawowe informacje o procesie //Funkcja zwraca True jeżeli znaleziono proces, w przeciwnym wypadku False function GetProcessInfoByPath(ProcessPath: string;var ProcInfo: TProcessEntry32): Boolean; var hSnapshot: THandle; Next:Boolean; begin result:= False; hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnapshot <> 0 then begin ProcInfo.dwSize:=SizeOf(ProcInfo); Next:= Process32First(hSnapshot, ProcInfo); while Next do begin if lstrcmpi(ProcInfo.szExeFile, PChar(ProcessPath)) = 0 then begin result:= True; break; end; Next:= Process32Next(hSnapshot, ProcInfo); end; CloseHandle(hSnapshot); end; end; //Zamyka proces o podanym ID Zaraca True jeżeli sie powiedzie //w przeciwnym przypadku False function KillProcess(ProcessID: Cardinal): Boolean; var hProcess: THandle; begin result:= False; hProcess:= OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID); if hProcess > 0 then begin result:= TerminateProcess(hProcess, 0); CloseHandle(hProcess); end; end;
Przyład użycia:
var PI: TProcessEntry32; begin if GetProcessInfoByPath('C:\Program Files\Gadu-Gadu\gg.exe', PI) then begin if KillProcess(PI.th32ProcessID) then ShowMessage('Proces zakończono') else ShowMessage('Błąd!!!'); end else ShowMessage('Nie znaleziono procesu!!!'); end;
Pozdrawiam
uses PsApi; function ZamknijProces(sciezka:string):boolean; var buf:pchar; i, p:integer; r:cardinal; pr:array[0..127]of cardinal; begin result:=false; getmem(buf,256); EnumProcesses(@pr,256,r); for i:=0 to r div 2-1 do begin p:=OpenProcess(PROCESS_ALL_ACCESS,false,pr[i]); if p>0 then if GetModuleFileNameEx(p,0,buf,256)<>0 then if lowercase(buf)=lowercase(sciezka) then begin TerminateProcess(p,0); result:=true; break; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if ZamknijProces('c:\windows\system32\notepad.exe') then MessageBox(0,'Proces został zatrzymany :)','',1048640) else MessageBox(0,'Proces nie został zatrzymany :(','',1048592); end;
Użytkownik Cyrkiel edytował ten post 13 lipiec 2005, 17:36
Serdeczne dzięki. Biore sie za testowanie.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Prosze o pomoc
Witam
Kod na 100% działa na Windows 98, niestety w systemach opartych na NT nie zawsze "zabjanie" procesu działa.
//Do uses dodaj TLHelp32 //ProcessPath: string - sciezka i nazwa programu //ProcInfo: TProcessEntry32 - Tu zwracane sa podstawowe informacje o procesie //Funkcja zwraca True jeżeli znaleziono proces, w przeciwnym wypadku False function GetProcessInfoByPath(ProcessPath: string;var ProcInfo: TProcessEntry32): Boolean; var hSnapshot: THandle; Next:Boolean; begin result:= False; hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnapshot <> 0 then begin ProcInfo.dwSize:=SizeOf(ProcInfo); Next:= Process32First(hSnapshot, ProcInfo); while Next do begin if lstrcmpi(ProcInfo.szExeFile, PChar(ProcessPath)) = 0 then begin result:= True; break; end; Next:= Process32Next(hSnapshot, ProcInfo); end; CloseHandle(hSnapshot); end; end; //Zamyka proces o podanym ID Zaraca True jeżeli sie powiedzie //w przeciwnym przypadku False function KillProcess(ProcessID: Cardinal): Boolean; var hProcess: THandle; begin result:= False; hProcess:= OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID); if hProcess > 0 then begin result:= TerminateProcess(hProcess, 0); CloseHandle(hProcess); end; end;
Przyład użycia:
var PI: TProcessEntry32; begin if GetProcessInfoByPath('C:\Program Files\Gadu-Gadu\gg.exe', PI) then begin if KillProcess(PI.th32ProcessID) then ShowMessage('Proces zakończono') else ShowMessage('Błąd!!!'); end else ShowMessage('Nie znaleziono procesu!!!'); end;
Pozdrawiam
uses PsApi; function ZamknijProces(sciezka:string):boolean; var buf:pchar; i, p:integer; r:cardinal; pr:array[0..127]of cardinal; begin result:=false; getmem(buf,256); EnumProcesses(@pr,256,r); for i:=0 to r div 2-1 do begin p:=OpenProcess(PROCESS_ALL_ACCESS,false,pr[i]); if p>0 then if GetModuleFileNameEx(p,0,buf,256)<>0 then if lowercase(buf)=lowercase(sciezka) then begin TerminateProcess(p,0); result:=true; break; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if ZamknijProces('c:\windows\system32\notepad.exe') then MessageBox(0,'Proces został zatrzymany :)','',1048640) else MessageBox(0,'Proces nie został zatrzymany :(','',1048592); end;
Użytkownik Cyrkiel edytował ten post 13 lipiec 2005, 17:36
Serdeczne dzięki. Biore sie za testowanie.