Simulasi Gerakan Mouse

Akhir-akhir ini saya suka bermain game Dragons of Altantis di Facebook. Awalnya hanya iseng, tetapi lama-kelamaan menjadi senang. Akan tetapi ada hal yang menyebalkan dari game ini, yaitu bahwa kita harus membuang waktu yang lama hanya untuk bermain game ini.

Kita hanya bisa melakukan sebuah pekerjaan dalam sekali waktu. Dan pekerjaan itu terkadang memakan waktu yang begitu lama sampai berjam-jam. Sayangnya, jika kita meninggalkan komputer terlalu lama, maka game ini akan meminta perhatian dari kita. Jadi, game ini benar-benar game yang dirancang untuk membuang waktu kita dengan sia-sia.

Sebagai seorang programmer, saya berpikir mungkin ada cara untuk membohongi game ini, sehingga game ini mengira bahwa kita masih memainkan game ini, tetapi sebenarnya program yang kita jalankan yang memainkannya. Sedangkan kita sebenarnya pergi meninggalkan komputer untuk melakukan hal lain.

Gagasan yang pertama muncul adalah membuat program yang akan menggerakkan pointer mouse. Saya merencanakan untuk membuat software yang menggerakkan mouse dengan berputar. Pertama bergerak ke kanan, kemudian turun, kemudian ke kiri, dan terakhir naik lagi menuju posisi awal. Dengan demikian, pointer mouse akan terus bergerak tanpa akhir sampai kita menghentikan aksi dari software ini.

Untuk bisa menggerakkan mouse, pertama kita harus mengetahui posisi pointer mouse. Fungsi untuk mengetahui posisi pointer mouse adalah

GetCursorPos(pt);

pt adalah variabel bertipe TPoint.

Setelah kita mendapat posisi pointer, maka kita bisa menggerakkan pointer dengan cara sebagai berikut:

Langkah terakhir adalah menempatkan posisi pointer pada posisi yang telah kita modifikasi dengan cara di atas. Fungsi untuk menempatkan posisi pointer mouse adalah

SetCursorPos(pt.x,pt.y);

Agar pointer mouse bergerak sesuai dengan rencana di atas, maka saya membuat sebuah variabel yang saya gunakan untuk menentukan kemana arah gerakan mouse. Variabel tersebut saya beri nama PosX. Kemudian saya juga harus menentukan seberapa besar pergerakan tersebut. Untuk menyederhanakan rancangan, saya menentukan bahwa gerakan vertikal maupun horisontal ukurannya sama. Ukuran ini saya tentukan dengan variabel bernama SQSize.

Dari dua variabel tersebut, kita bisa menentukan kemana arah gerakan dengan membagi PosX dengan SQSize. Jika hasilnya 0, maka gerakan yang dilakukan adalah ke kanan, jika 1 ke bawah, jika 2, ke kiri, jika 3 ke atas, dan jika 4, maka hal ini menunjukkan bahwa satu periode gerakan terlah terlampaui. Oleh karena itu, jika hasilnya 4, selain kita menggerakkan pointer mouse ke kanan, kita juga mengembalikan nilai PosX ke posisi awal lagi.

Keseluruhan proses di atas bisa kita laksanakan dengan sebuah prosedur seperti berikut:

procedure MoveMousePointer;
var pt:TPoint;
begin
  GetCursorPos(pt);
  case(PosX div SQSize)of
    0:begin
        inc(pt.x);
        inc(PosX)
      end;
    1:begin
        inc(pt.y);
        inc(PosX)
      end;
    2:begin
        dec(pt.x);
        inc(PosX)
      end;
    3:begin
        dec(pt.y);
        inc(PosX)
      end;
    4:begin
        inc(pt.x);
        PosX:=1;
      end;
  end;
  SetCursorPos(pt.x,pt.y);
end;

Prosedur MoveMousePointer ini kemudian dipanggil setiap interval tertentu menggunakan timer.

Cara ini tentu saja bukan satu-satunya trik. Akan tetapi setidaknya kita bisa menggunakan masalah yang kita hadapi sebagai media untuk belajar.

Jika Anda hanya ingin menggunakan software ini, Anda bisa mendownload software yang saya namai MoveMouse.exe yang saya kompilasi menggunakan Lazarus. Sedangkan jika Anda juga tertarik untuk mempelajari bagaimana software ini dibentuk, Anda bisa mendownload source yang bisa Anda kompilasi menggunakan Delphi maupun Lazarus.

Saya menyukai software dengan ukuran yang kecil. Oleh karena itu, software ini saya bentuk tanpa menggunakan VCL (Delphi) atau LCL (Lazarus), melainkan saya susun menggunakan Windows API.

MoveMouse.exe

MoveMouse.exe

Source

Source

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

3 Komentar
  1. Wah, mantab kodenya. Pengen sekali bisa mahir Windows API…

  2. Posting yang menarik mas Sulhan. Lama tidak menyentuh Delphi lagi. Masih ingat saya kan? ^_^
    Oya, link untuk .EXE broken.

    • Tentu masih ingat lah. Apakabar? Oia, maaf, ternyata nama filenya salah 😀 sudah dibenerin. Terimakasih infonya.

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.