03 November 2008

Cek Aplikasi Yang Sedang Aktif

Berikut adalah contoh sederhana untuk memeriksa file Exe apa saja yang sedang berjalan dalam komputer ...

1. Buat Project Baru
2. Tambahkan beberapa komponen, diantaranya
- Button1 dengan Caption 'Cek Notepad'
- Button2 dengan Caption 'Daftar Exe sedang Running'
- ListBox1
3. Buatlah 2 buah procedure yaitu (CreateWin9xProcessList,CreateWinNTProcessList,GetProcessList) dan satu buah Fungsi yaitu ( EXE_Running)
code lengkapnya seperti ini ...

Jika sistem Operasi anda adalah Win9x maka procedure berikut yang akan di panggil ....

procedure CreateWin9xProcessList(List : TStringList) ;
var
hSnapShot : THandle;
ProcInfo : TProcessEntry32;
begin
if List = nil then Exit ;
hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot <> THandle(-1)) then
begin
ProcInfo.dwSize := sizeof(ProcInfo) ;
if (Process32First(hSnapshot, ProcInfo)) then
begin
List.Add( ProcInfo.szExeFile) ;
while (Process32Next(hSnapShot, ProcInfo)) do
List.Add(ProcInfo.szExeFile) ;
end ;
CloseHandle(hSnapShot) ;
end ;
end ;

Jika sistem Operasi anda adalah WinNT,2000,XP,Vista maka procedure berikut yang akan di panggil ....

procedure CreateWinNTProcessList(List : TStringList) ;
var
PIDArray : array [0..1023] of DWORD ;
cb : DWORD ;
I : integer ;
ProcCount : integer ;
hMod : HMODULE ;
hProcess : THandle ;
ModuleName : array [0..300] of char ;
begin
if List = nil then Exit ;
EnumProcesses(@PIDArray, sizeof(PIDArray), cb) ;
ProcCount := cb div sizeof(DWORD) ;
for I := 0 to ProcCount-1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
false,
PIDArray[I]) ;
if (hProcess <> 0) then
begin
EnumProcessModules(hProcess, @hMod, sizeof(hMod), cb) ;
GetModuleFilenameEx(hProcess,hMod,ModuleName,sizeof(ModuleName));
List.Add(ModuleName);
CloseHandle(hProcess);
end;
end;
end;

procedure GetProcessList(Var List : TStringList) ;
var ovi : TOSVersionInfo ;
begin
if List = nil then Exit ;
ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo) ;
GetVersionEx(ovi) ;
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS : CreateWin9xProcessList(List) ;
VER_PLATFORM_WIN32_NT : CreateWinNTProcessList(List) ;
end
end;

function EXE_Running(FileName : String; fullpath : boolean) : boolean;
var
i : integer ;
MyProcList : TStringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList) ;
result := false;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
begin
if not fullpath then
begin
if CompareText(ExtractFileName(MyProcList.Strings[i]),FileName) = 0 then result := true
end else
if CompareText(MyProcList.Strings[i],FileName) = 0 then result := true;
if result then break;
end;
finally
MyProcList.Free ;
end;
end;

4. Pada even OnClick milik Button1 masukan Code berikut :

// Misal akan mengecek apakah Program Notepad sedang di jalankan ..... if EXE_Running('notepad.exe',false) then ShowMessage('Notepad is running') else ShowMessage('Notepad is not running');

5. Pada even OnClick milik Button2 masukan Code berikut :

// mengecek semua program EXE yang sedang di jalankan .....
var i : integer ; MyProcList : TStringList; begin MyProcList := TStringList.Create; try GetProcessList(MyProcList) ; if MyProcList = nil then Exit; ListBox1.Clear; for i := 0 to MyProcList.Count - 1 do ListBox1.items.add(MyProcList.Strings[i]); finally MyProcList.Free; end;

dan hasilnya adalah ...


[.... Setelah Button2 kemudian Button1 di klik ...]