Senin, 14 September 2015

Cara Mendaftarkan HotKey dengan Windows API


Hotkey adalah salah satu fitur yang banyak diterapkan pada sistem operasi berbasis GUI. Meskipun sebagian besar akses program GUI dilakukan dengan mouse, akses menggunakan keyboard juga masih tetap dipakai. Jika anda masih belum tahu apa itu Hotkey, cobalah jangan menyimpan dokumen melalui menu File -> Save, tapi cukup tekan CTRL + S secara bersamaan; atau, jika ingin membuka file, cukup tekan CTRL + O. Yups, itulah hotkey.

Fitur hotkey sebenarnya efektif untuk program GUI, namun kita masih bisa mencobanya pada program console. Hotkey yang kita bahas disini adalah global hotkey. Artinya, hotkey ini dapat diterima oleh program tanpa harus membuat window dalam keadaan focus, misalnya saat program di-minimize, program tetap dapat menerima hotkey yang telah ditentukan. Contoh program yang menggunakan global hotkey adalah software screen shot dan antivirus; program ini berjalan otomatis saat startup dan bekerja dalam background, lalu program ini akan tampil saat user menekan tombol yang telah ditentukan, misalnya Shift + PrtSc.

Di Windows, pendaftaran Hotkey dilakukan dengan API RegisterHotKey


BOOL WINAPI RegisterHotKey(
  _In_opt_ HWND hWnd,
  _In_     int  id,
  _In_     UINT fsModifiers,
  _In_     UINT vk
);

hWnd adalah handle window yang ingin mendaftarkan hotkey. Parameter ini bersifat opsional, karena kita membuat program konsol, hiraukan saja parameter ini.
id adalah identifier hotkey. Misalnya kita mendaftarkan 2 hotkey, maka kita bisa membuat id hotkey pertama = 1 dan id hotkey kedua = 2.
fsModifiers adalah keyboard utama hotkey. Argumen yang bisa dimasukkan dapat berupa konstanta sebagai berikut:
  • MOD_WIN
  • MOD_CONTROL
  • MOD_SHIFT
  • MOD_ALT
vk adalah kode tombol keyboard yang harus ditekan bersamaan dengan tombol yang telah ditentukan pada fsModifiers. Info lengkap, kunjungi link berikut, https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

Jika berhasil, fungsi ini mengembalikan nilai TRUE. Sebaliknya, jika gagal nilai FALSE yang dikembalikan.

Contoh


#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

int main(void){
	BOOL retval;
	MSG msg = {0};
	
	retval = RegisterHotKey (0, 1, MOD_SHIFT | MOD_CONTROL, 0x4B);
	if (retval == FALSE){
		printf("Gagal mendaftarkan HotKey\n");
		exit(-1);
	}
	else
		printf("Pendaftaran HotKey berhasil\n");
	
	while (GetMessage(&msg, NULL, 0, 0) != 0){
		if (msg.message == WM_HOTKEY){
			printf("HotKey CTRL + SHIFT + K diterima \n");            
		}
	} 
    return 0;	
} 

Hasil
Berikut ini adalah hasil program dari kode di atas.


Resources
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646309%28v=vs.85%29.aspx
Load disqus comments

0 comments