Bazen klavyeden basılan tuşu yakalamamız ve bu basılan tuşa göre işlem yapmamız gerekebilir. Bazı durumlarda ise basılan tuşu yutmamız ve geçersiz göstermemiz gibi durumlar ile karşılaşabiliriz. Böyle durumlarda klavye den istenilen tuşun basılıp basılmadığını arkaplanda çalışan uygulamamız ile takip ederek ilgili metodlarımızı tetikleyebiliriz. Öncelikle aşağıdaki linkten ilgili class ı indirerek projemize eklememiz gerekiyor. Daha sonrasında ise projemizde kullanacağımız sayfaya
using
FarukUNAL;
ekleyerek bu class ı referans göstermemiz gerekir. Şimdi ilk olarak aşağıdan bu class ı ekleyerek projemize ekleyelim
Şimdi de projemize global olarak ilgili class ımızdan bir değişken türetiyoruz
globalKeyboardHook klavyeDinleyicisi =
new
globalKeyboardHook();
Daha sonrasında ise klavyeden hangi tuşlara basıldığında programımızın tetiklenmesini istiyorsak onları ayarlamamız gerekiyor. Bunun içinde aşağıdaki fonksiyonunun içerisinde ilgili tuşları ayarlayabilirsiniz. Daha sonrasında da bu fonksiyonu programın açlışına ekliyoruz ki program açılır açılmaz klavyeyi dinlemeye başlayalım
public
Form1()
{
InitializeComponent();
DinlenecekTuslariAyarla();
}
public
void
DinlenecekTuslariAyarla()
{
// hangi tuşları dinlemek istiyorsak burada ekliyoruz
// Ben burada F,K ve M harflerine basılınca tetiklenecek şekilde ayarladım
klavyeDinleyicisi.HookedKeys.Add(Keys.F);
klavyeDinleyicisi.HookedKeys.Add(Keys.K);
klavyeDinleyicisi.HookedKeys.Add(Keys.M);
//basıldığında ilk burası çalışır
klavyeDinleyicisi.KeyDown +=
new
KeyEventHandler(islem1);
//basıldıktan sonra ikinci olarak burası çalışır
klavyeDinleyicisi.KeyUp +=
new
KeyEventHandler(islem2);
}
Yorumlara da yazdığım gibi eklediğimiz class dan türettiğimiz değişkenin tuş yakalamada kullanacağımız 2 metodu var
Yukarıdaki kırmızı ile belirttiğim islem1 ve islem2 ise bu metodlarda tetiklenecek olan metodları belirtiyor. Bu metodları kendimiz tanımlayarak buraya ilişkilendiriyoruz ve tetiklendiğinde bu metodların içerisine yazdığımız komutlar çalışıyor
void
islem1(
object
sender, KeyEventArgs e)
{
//Yapılmasını istediğiniz kodlar burada yer alacak
//Burası tuşa basıldığı an çalışır
//Eğer buraya gelecek olan tuşa basıldığında
//o tuşun normal işlevi yine çalışsın istiyorsanız
//e.Handled değeri false olmalı
//eğer ilgili tuşa basıldığında burada yakalansın
// ve devamında tuş başka bir işlev gerçekleştirmesin
//istiyorsanız bu değeri true yapmalısınız
e.Handled =
false
;
}
void
islem2(
object
sender, KeyEventArgs e)
{
//Yapılmasını istediğiniz kodlar burada yer alacak
// Burası ilgili tuşlara basılıp çekildikten sonra çalışır
//Eğer buraya gelecek olan tuşa basıldığında
//o tuşun normal işlevi yine çalışsın istiyorsanız
//e.Handled değeri false olmalı
//eğer ilgili tuşa basıldığında burada yakalansın
// ve devamında tuş başka bir işlev gerçekleştirmesin
//istiyorsanız bu değeri true yapmalısınız
e.Handled =
true
;
}
Bu metodlarda da dikkat etmeniz gereken nokta el alttaki e.Handled kısmı. Buraya atadığımız değere göre örneğin burayı true yaptığımızda belirttiğimiz tuşa basıldığı anda kullanıcı mesela not defterinde yazı yazıyor ise basılan tuş işlemeyecek, not defterine yazmayacak fakat Bizim metod da belirttiğimiz işlemler gerçekleşecektir, ama burayı false olarak ayarlar isek hem kullanıcının bastığı tuş işlevi çalışacak hemde kendi metodumuzda istediğimiz komutlar işlem gerçekleştirecektir
Uygulamanız arkaplanda çalışıyor da olsa her zaman basılan tuşları takip edecek ve bunlara göre çalışacaktır. Uygulamananız nasıl çalışsın istiyorsanız kendinize göre ayarlayabilirsiniz. Bu komutlar ile her daim basılan tuşları yakayarak kullanabilirsiniz