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