Rabu, 20 Mei 2015

Mengetahui Posisi Kursor dengan Windows API [C Programming]


Sekali lagi, semangat ngoding saya kembali menurun. Saya jadi bingung judul apa lagi yang bisa saya bagikan di blog ini. Karena tidak banyak melakukan aktivitas koding, tidak ada hal baru yang bisa saya share. Tiba-tiba saya dapat pencerahan, hal lama yang telah saya pelajari kan belum tentu sudah dipelajari oleh orang lain. :D
Jadi, saya memutuskan untuk menulis tutorial pemrograman untuk mengetahui posisi kursor di Windows. Tentu saja dengan bahasa pemrograman favorit saya, C. ;)
Fungsi API yang kita gunakan adalah GetCursorPos(). Fungsi ini tersimpan dalam library user32.dll. Untuk menggunakan fungsi ini di dalam lingkungan bahasa pemrograman C, kita cukup meng-include header windows.h. Dengan meng-include header ini, secara otomatis, header user32.h juga akan di-include dalam kode. Dalam user32.h inilah seluruh definisi fungsi yang kita butuhkan berada. Saat menulis kode, secara tidak sengaja saya juga teringat fungsi Sleep(). Mungkin fungsi ini akan berguna bagi sobat suatu saat nanti. :D

Prototype GetCursorPos() adalah sebagai berikut.

BOOL WINAPI GetCursorPos(LPPOINT lpPoint);

lpPoint : Pointer ke struktur POINT. Struktur ini biasa digunakan untuk menentukan koordinat.
Return : Fungsi ini mengembalikan nilai TRUE jika berhasil, begitu pula sebaliknya.



Adapun bentuk struktur POINT adalah sebagai berikut.

typedef struct tagPOINT {
  LONG x;
  LONG y;
} POINT;

Contoh

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

int main(int argc, char**argv[])
{
    POINT p;
    while(1)
    {
        GetCursorPos(&p);
        printf("Posisi kursor saat ini adalah x:%4d dan y:%4d\n", p.x, p.y);
        Sleep(1000);
        system("cls");

    }
    return 0;
}

Contoh di atas juga menggunakan fungsi Sleep(). Fungsi ini digunakan untuk melakukan pause/sleep/penundaan selama beberapa milidetik. Alasan saya memakai fungsi ini adalah untuk mengurangi frekuensi pemanggilan GetCursorPos(). Fungsi ini berasal dari kernel32.dll, jadi jika agan mencobanya di sistem operasi lain, gak bisa ya. Prototypenya adalah sebagai berikut.

VOID WINAPI Sleep(DWORD dwMilliseconds);

dwMilliseconds: Waktu untuk menghentian pause thread dalam satuan milidetik. Jadi untuk melalakukan pause selama 1 detik, kita menggunakan nilai 1000 sebagai argumennya.

Sekian sedikit tulisn dari saya, semoga bermanfaat. Happy coding :)

Hasil
 
Load disqus comments

0 comments