Merhaba arkadaşlar.
Bir program yazmak istiyorum. Bu program o an çalışan bir programı belirli aralıklarla kontrol edecek çalışıp çalışmadığını. Eğer kontrol ettiğim program bir sebepten dolayı kapanırsa bir alarm üretmek istiyorum. Bunu nasıl yapabilirim ? Bir çok site araştırdım ama istediğim gibi bir kod bulamadım. Yardımlarınız için teşekkürler
Çalışan Bir Programı Sorgulamak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- barisatalay
- Üye
- Mesajlar: 398
- Kayıt: 02 Nis 2013 05:43
- İletişim:
-
- Üye
- Mesajlar: 118
- Kayıt: 17 Ağu 2010 09:08
Re: Çalışan Bir Programı Sorgulamak
İnceledim ama tam olarak istediğim gibi değil. Farklı sitelerde de arıyorum fakat bulamadım henüz
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: Çalışan Bir Programı Sorgulamak
Merhaba,
Aşağıdaki örnek işinizi görecektir. Fakat, bu kod ile yazdığınız program 32bit ise 64bitlik uygulamaları kontrol edemezsiniz. Bu yüzden 64bit derleyiciniz varsa programınızı 64bit olarak derleyin.
Aşağıdaki örnek işinizi görecektir. Fakat, bu kod ile yazdığınız program 32bit ise 64bitlik uygulamaları kontrol edemezsiniz. Bu yüzden 64bit derleyiciniz varsa programınızı 64bit olarak derleyin.
Kod: Tümünü seç
uses'a PsApi'yi ekleyin. (XE sürümleri için Winapi.Psapi)
type
TEnumProcData = record
ProcessId: THandle;
FileName: string;
end;
TEnumProcessData = array of TEnumProcData;
implementation
function EnumAllProcessesWithPath(var ProcData: TEnumProcessData): Integer; safecall;
var eapResCnt, eapHProc, eapHMod, eapNeeded: DWord;
eapProcs: array [0..1023] of DWord;
eapFileName: array [0..1023] of Char;
eapCnt, eapCount: Integer;
begin
Result := 0;
if EnumProcesses(@eapProcs, Length(eapProcs), eapResCnt) then
begin
eapResCnt := eapResCnt div SizeOf(DWord); eapCount := 0;
for eapCnt := 0 to eapResCnt - 1 do
begin
eapHProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, eapProcs[eapCnt]);
if eapHProc > 0 then
begin
if EnumProcessModules(eapHProc, @eapHMod, SizeOf(eapHMod), eapNeeded) then
begin
GetModuleFileNameEx(eapHProc, eapHMod, eapFileName, SizeOf(eapFileName));
Inc(eapCount);
SetLength(ProcData, eapCount);
ProcData[eapCount - 1].ProcessId := eapProcs[eapCnt];
ProcData[eapCount - 1].FileName := eapFileName;
end;
CloseHandle(eapHProc);
end;
end;
Result := eapCount;
end;
end;
function IsProcessRunning(pFilePath: string): Boolean;
var AllProcess: TEnumProcessData;
i, ProcCount: Integer;
SrcFilePath: string;
begin
Result := False;
SetLength(AllProcess, 0);
ProcCount := EnumAllProcessesWithPath(AllProcess);
SrcFilePath := AnsiLowerCase(pFilePath);
for i := 0 to ProcCount - 1 do
if AnsiLowerCase(AllProcess[i].FileName) = SrcFilePath then
begin
Result := True;
Break;
end;
end;
// bu kısım örnek olsun diye, 32 ve 64 bit notepad.exe'nin çalışıp çalışmadığının kontrolü için
procedure TForm1.Button1Click(Sender: TObject);
begin
If IsProcessRunning('C:\Windows\System32\Notepad.exe') then // 64bit olan
Edit1.Text := 'Notepad64 çalışıyor.'
else
Edit1.Text := 'Notepad64 Çalışmıyor.';
If IsProcessRunning('C:\Windows\Syswow64\Notepad.exe') then // 32 bit olan
Edit2.Text := 'Notepad32 çalışıyor.'
else
Edit2.Text := 'Notepad32 Çalışmıyor.' ;
end;