Pernahkan Anda ingin menjalankan
suatu program secara diam-diam (background
process)?
Background process
tidak akan muncul di taskbar, sehingga cukup aman untuk dijalankan tanpa
diketahui orang lain. Program sejenis ini dapat digunakan jika Anda tidak ingin
orang lain secara tidak sengaja (maupun dengan sengaja) menutup aplikasi anda. Atau
Anda ingin mengeluarkan gambar seram secara tiba-tiba untuk menakuti teman
Anda? Atau Anda ingin merekam semua keypress
yang dilakukan oleh orang yang Anda benci, misalnya untuk mengambil password
:D?
DISCLAIMER: Tutorial ini tidak
ditujukan untuk tindakan kejahatan apapun. Segala macam tindak kriminal yang
dilakukan menggunakan tutorial ini merupakan sepenuhnya di luar tanggung jawab
kami!
Oke, sekian basa-basinya.
Berikut ini akan dijelaskan langkah-langkah untuk membuat sebuah program
berjalan secara background process,
menggunakan C++. Tutorial ini dilakukan pada OS Windows 7. Apabila ada masalah dengan OS lain, silakan tulis komentar Anda di bawah.
1. Pertama, Anda perlu
mengetahui function CreateProcess(). Fungsi ini berguna untuk menjalankan
proses lain. Parameternya ada banyak, tetapi biasanya cukup 2 saja yang Anda
perlu ketahui.
Parameter pertama merupakan
filepath menuju executable yang Anda inginkan, sedangkan parameter kedua
merupakan command-line parameter yang dapat Anda eksekusi melalui command
prompt. Parameter kedua akan digunakan apabila parameter pertama bernilai NULL.
Untuk referensi lebih lanjut, silakan kunjungi http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx
Maka, untuk menjalankan
calculator, Anda dapat melakukan seperti ini
CreateProcess("C:\\Windows\\System32\\calc.exe",
NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
Perhatikan untuk parameter
pertama, backslash harus ditulis ganda, karena dalam C++, backslash digunakan
untuk meng-escape karakter
2. Parameter StartupInfo dan
ProcessInformation pada function CreateProcess() tidak boleh diisi NULL, tetapi
harus diisi sesuai dengan tipe datanya. Maka Anda perlu menambahkan baris ini
sebelum mengeksekusi CreateProcess().
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
3. Untuk menyembunyikan jendela
executable, cukup tambahkan 3 baris berikut.
HWND hwnd;
hwnd =
FindWindowA("ConsoleWindowClass", SW_HIDE);
ShowWindow(hwnd, 0);
4. Sekarang, saatnya
menggabungkan poin-poin penting yang telah dijelaskan. Misalnya kita akan
membuat sebuah aplikasi yang dapat menampilkan gambar setiap satu jam (pukul 6,
7, 8, …). Untuk itu kita perlu membuat sebuah function untuk menangani waktu
ini. Berikut adalah contoh function yang dimaksud.
void
Tunggu(){
time_t now;
while(true){
time(&now); //ambil waktu sekarang
if(now % 3600 <=1){ // setiap 1 jam
KeluarGambar();
_sleep(3000); // pastikan hanya 1 gambar
di detik yg sama
}
_sleep(1000); // jangan makan CPU terlalu
banyak
}
}
Function KeluarGambar() bertugas
membuat proses baru yang mengeluarkan gambar. Untuk itu, kita perlu memanggil
aplikasi yang dapat menampilkan gambar. Untuk tutorial ini, kita akan
menggunakan Windows Photo Viewer. Windows tidak memberikan file executable
untuk windows photo viewer, melainkan hanya sebuah file .dll yang diberikan
pada directory C:\Program Files\Windows Photo Viewer. Untuk itu kita perlu
mengeksekusi rundll32.exe terlebih dahulu. Berikut merupakan function yang
dimaksud.
void
KeluarGambar(){
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
char cmd[260] = "rundll32.exe
\"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\",
ImageView_Fullscreen ";
strcat(cmd, FILEPATH);
CreateProcess(NULL, cmd, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi );
}
Untuk FILEPATH dapat diisi
sesuai lokasi file gambar. Lebih baik jika FILEPATH dideklarasikan di awal
menggunakan preprocessor, sehingga mudah diganti. Misalnya seperti berikut:
#define
FILEPATH "C:\\Program Files\\test.png"
Perhatikan bahwa lokasi file disesuaikan menurut komputer
Anda! Penggunaan backslash ganda wajib karena backslash merupakan escape
character dalam C++.
Terakhir adalah function main()
sebagai entry program.
int
main(){
Sembunyi();
Tunggu();
}
Library yang perlu di-include
dalam pekerjaan ini adalah <windows.h>, <string.h>, dan
<time.h>.
Compile hasil pekerjaan Anda.
Karena ini merupakan background process,
perhatikan bahwa untuk mengakhiri process tidak dapat di-close seperti biasa.
Salah satu cara mengakhiri process adalah menggunakan task manager.
Note: source code mengeluarkan gambar
setiap 1 menit untuk mempermudah pengecekan. Silakan ubah konstanta waktu dari
60 menjadi 3600, seperti yang telah dibahas di tutorial.
*Apabila gambar tidak keluar,
pastikan Anda telah meletakkan file
sesuai path!
Ada pertanyaan / komentar /
saran? Silakan masukkan di kotak di bawah ini… :D
Perhatian: Serabutan Dotcom menerima jasa programming, dan masih banyak lainnya lho! Murah, cepat, dan gampang, silakan kunjungi laman ini untuk melihat semua jasa yang kami tawarkan. Terima kasih ..!
Perhatian: Serabutan Dotcom menerima jasa programming, dan masih banyak lainnya lho! Murah, cepat, dan gampang, silakan kunjungi laman ini untuk melihat semua jasa yang kami tawarkan. Terima kasih ..!

cara compilenya pake apa?
BalasHapus