Klavye'ye İnput Göndermek C++.Net Visual Studio

Posted by : Bora Ciner | 12 Mayıs 2009 Salı | Published in


Bilgisayarımıza sanki klavyeden input yapılıyormuş gibi keybd_event() 'i nasıl kullanacağımızı anlatacağım. Bu satırları programda kullanarak wii mote veya başka aygıtlara kontrol yazılımları oluşturarak değişik programlara ( google earth , winamp vb.. ) erişim sağlayabiliriz.




1-) öncelikle using System.Runtime.InteropServices;
satırını Form1.cs dosyamızın en üst kısmına koyuyoruz.
2-) Form1 () fonksiyonunun hemen üst kısmına şu kodları ekliyoruz.


//import mouse_event function from user32.dll
//[DllImport("user32.dll")]
//static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
//import keybd_event function from user32.dll
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void keybd_event(byte bVk, byte bScan, long dwFlags, long dwExtraInfo);
//import GetCursorPos function from user32.dll
[DllImport("user32.dll")]
private static extern bool GetCursorPos(ref Point lpPoint);
//import SetCursorPos function from user32.dll
[DllImport("user32.dll")]
public static extern int SetCursorPos(int x, int y);
//struct Point
//{
// public int x;
// public int y;
//}
//declare consts for mouse messages
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
public const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
public const int MOUSEEVENTF_MIDDLEUP = 0x40;
public const int MOUSEEVENTF_MOVE = 0x01; //Relative move
public const int MOUSEEVENTF_MOVE_ABS = 0x8001; //Absolute move
public const int KEYEVENTF_EXTENDEDKEY = 0x01;
public const int KEYEVENTF_KEYDOWN = 0x00;
public const int KEYEVENTF_KEYUP = 0x02;
private int ScrWidth = 1024;
private int ScrHeight = 786;
private int ScrX0 = 0;
private int ScrY0 = 0;
private double Timer1_m = 0;
private double Timer1_s = 0;
private double Timer1_count = 0;
private double Timer2_m = 0;
private double Timer2_s = 0;
private double Timer2_count = 0;
private double Timer3_m = 0;
private double Timer3_s = 0;
private double Timer3_count = 0;
private double Timer4_m = 0;
private double Timer4_s = 0;
private double Timer4_count = 0;
private bool LED1 = false;
private bool LED2 = false;
private bool LED3 = false;
private bool LED4 = false;
private bool F5_next = true;
private bool T1_paused = false;
private bool T2_paused = false;
private bool T3_paused = false;
private bool T4_paused = false;
private bool T1_started = false;
private bool T2_started = false;
private bool T3_started = false;
private bool T4_started = false;
private double IR_margin = 0.05;
public bool Connected = false;
private string DecSym = ".";

3-) şimdi de bunu test etmek için bir timer açıp event'ini şu şekilde kodlayalım.


int klavyesay = 1;
private void klavye_Tick(object sender, EventArgs e)
{
klavyesay = klavyesay * -1;
if(klavyesay==1)
keybd_event((byte)Keys.G, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event((byte)Keys.B, 0, KEYEVENTF_KEYUP, 0);
if(klavyesay==-1)
keybd_event((byte)Keys.B, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event((byte)Keys.G, 0, KEYEVENTF_KEYUP, 0);
}


Programımız run edildiğinde her timer_tick 'te sırayla b veya g harflerine basıp çekecektir. Hangi tuşun basılmasını ayarlamak için Keys. kısmından sonra gelen yeri istediğimiz gibi kodlayabiliriz.

(0) Comments