MEMBUAT TASK MANAGER DENGAN DELPHI
Biasanya pada
Windows jika kita ingin mematikan suatu program yang mengalami crash atau tidak
ada respond maka kita akan menekan tombol Ctrl+Alt+Del. Setelah itu akan muncul
dialog box yang menampilkan semua proses yang ada dalam komputer sehingga kita
dapat menutup program yang mengalami crash tersebut dengan menggunakan End Task.
Task Manager menyediakan informasi tentang program dan proses yang berjalan pada
komputer kita. Dengan menggunakan Task Manager kita dapat melihat status proses
dari program yang berjalan dan dapat pula melihat status program yang tidak ada
respond.Seringkali saat kita menjalankan Windows terasa lambat, hal ini dapat
saja disebabkan oleh adanya suatu program yang berjalan di Windows tetapi tidak
terlihat karena baik proses, taskbar maupun formnya dihidden. Proses yang
terlihat pada task Manager Windows adalah proses yang proses id-nya didaftarkan.
Sedangkan program dengan proses id disembunyikan tidak akan terlihat. Hal ini
dapat disebabkan oleh berbagai macam alasan, misalnya saja sebagai program shell
yang harus berjalan, atau program yang bertugas memata-matai komputer kita (spy)
untuk mendapatkan informasi dan lain sebagainya. Dengan Task Manager yang kita
buat ini, kita dapat melihat semua proses yang tersembunyi dan melakukan kendali
atas aplikasi yang berjalan itu.
Untuk menampilkan semua window yang berjalan di Windows digunakan fungsi Windows
API EnumWindows yang menghitung semua level atas Windows dengan
melewatkan handle dari setiap window . Untuk setiap window yang diturunkan
EnumWindows akan memanggil kembali fungsi di aplikasi kita dan memberikan
kembali informasi tentang windownya. EnumWindows akan berjalan terus
sampai window level terakhir dihitung atau fungsi callback bernilai false.
Deklarasi fungsi ini adalah sebagai berikut :
function EnumWindows(lpEnumFunc: TFNWndEnumProc; lParam:
LPARAM):BOOL; stdcall;
Keterangan :
LpEnumFunc : alamat dari fungsi callback
LPARAM : informasi atau parameter yang dilewatkan
Berikut ini adalah listing programnya :
Listing 1 : Fungsi Callback untuk menampilkan Window yang terlihat
function EnumWindowsProc1 (Wnd: HWND; List: TStrings):
BOOL; stdcall;
var
caption: array [0..256] of Char;
begin
Result := True;
if GetWindowText (Wnd, Caption, SizeOf(Caption)-1) <> 0 then
begin
if IsWindowVisible(wnd) then
begin
List.AddObject( caption, TObject( Wnd ));
end;
end;
end;
Penjelasan dari listing di atas adalah sebagai berikut :
Fungsi GetWindowText mengkopi text dari window's title bar ke buffer bernama
caption. Untuk window yang terlihat kita gunakan fungsi IsWindowVisible(wnd)
sedangkan untuk window yang tidak terlihat tambahkan not
IsWindowVisible(wnd).Sedangkan List.AddObject( caption, TObject( Wnd ))
digunakan untuk mendapatkan data dengan ketentuan sebagai berikut :
List.items.Add(caption);
List.items.Objects[index] := Tobject(wnd);
Karena List.items.Objects[index] bertipe Tobject maka untuk mengembalikan
datanya kembali harus digunakan HWND(List.items.Objects[index]) agar bertipe
HWND lagi.
Dengan listing di atas maka akan didapatkan window's title bar dan handle dari
masing-masing window.
Listing 2 : Cara Pemakaian EnumWindows
procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox1.Clear;
EnumWindows(@EnumWindowsProc1, Integer(Listbox1.items));
end;
Karena EnumWindows membutuhkan Pointer ke fungsi callback, kita gunakan
operator @ , untuk mengirimkan fungsi EnumWindowsFunc1 callback ke dalam memory.
Oleh karena variabel List adalah Tstrings maka kita dapat lewatkan
Listbox1.items untuk mendapatkan data dari List.
Listing 3 : Mematikan sebuah Aplikasi
procedure TForm1.Button3Click(Sender: TObject);
var hProcess,i : HWND;
pid : DWORD;0
begin
if Listbox1.itemindex<> - 1 then
begin
i :=
HWND(Listbox1.items.Objects[Listbox1.itemindex]);
PostMessage(i,wm_close,0,0);
GetWindowThreadProcessID( i, @pid );
hProcess :=
OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
TerminateProcess(hProcess, 0);
end;
end;
Inti dari listing program 3 adalah PostMessage(i,wm_close,0,0) yang berfungsi
memberikan message wm_close kepada window dengan handle i untuk menutup
aplikasinya. Sedangkan tiga baris di bawahnya digunakan jika aplikasi tidak ada
respond. GetWindowThreadProcessID digunakan untuk memperoleh processid,
sedangkan OpenProcess dipakai untuk memberikan akses secara penuh kepada kita
untuk melakukan segala hal pada window tersebut. TerminateProcess untuk
mengakhiri proses yang mempunyai handle hProcess.
Selain dapat berguna mematikan aplikasi yang tidak ada respond, dengan
mendapatkan handle dari tiap window maka kita dapat mengendalikan aplikasi di
window tersebut. Berikut ini adalah contohnya :
Listing 4 : Contoh kendali atas aplikasi lain
a. Menyembunyikan Taskbar
procedure TForm1.Button4Click(Sender: TObject);
var i : HWND;
begin
if Listbox1.itemindex<> - 1 then
begin
i :=
HWND(Listbox1.items.Objects[Listbox1.itemindex]);
ShowWindow(i , SW_Hide);
end;
end;
Modul utama dari prosedur diatas ShowWindow(i , SW_Hide) yang berguna
untuk menyembunyikan taskbar dari suatu aplikasi. Untuk menampilkannya kembali
SW_Hide diganti dengan SW_Normal.
b. Menampilkan aplikasi yang hidden (Ctrl + Alt + Del) pada Task Manager
Windows
procedure TForm1.Button5Click(Sender: TObject);
var i : HWND;
kernel32:dword;
pid : dword;
begin
if Listbox1.itemindex<> - 1 then
begin
i :=
HWND(Listbox1.items.Objects[Listbox1.itemindex]);
GetWindowThreadProcessID( i, @pid );
kernel32 := GetModuleHandle('kernel32.dll');
RegisterServiceProcess :=
GetProcAddress(kernel32, 'RegisterServiceProcess');
RegisterServiceProcess(pid,0);
end;
end;
Inti dari prosedur diatas yaitu RegisterServiceProcess(i,1) yang akan
membuat aplikasi yang tidak terlihat pada Task Manager Windows menjadi terlihat.
Dengan begitu kita akan dapat mematikan servis aplikasi tersebut. Untuk
menyembunyikan kembali ganti konstanta 0 dengan 1.
[GAMBAR1.BMP]
Program Memperlihatkan Proses yang visible di komputer
Program Task Manager ini masih memiliki banyak kekurangan untuk itu anda dapat
mengembangkannya
Kepustakaan :
http://delphi.about.com/library/weekly/aa082900a.htm
MIKRODATA Vol 12 Seri 14“Menyembunyikan Proses Di Windows”,Yohanes
Nugroho
Nino Budi S