C# Tuş Bastırma Ve Başka Uygulamaya Tuş Gönderme

Bu konuyu okuyanlar

eymenbex

Öğrenci
Katılım
8 Ağustos 2018
Mesajlar
51
Reaksiyon puanı
15
Puanları
8
Öncelikle c#'da tuş bastırmak nasıl olur onunla başlayalım:



C#'ta tuş bastırma işlemi çok zor değil aslında. Tek komutla tuş bastırabilirsiniz. Ancak sadece sizin uygulamanızda geçerli olur. Daha doğrusu o an aktif olan pencere(üstte olan pencere) hangisiyse onda etkili olur. Evet, doğru pek işe yarar gibi durmuyor. Komutun kullanımı aşağıdaki gibidir:

SendKeys.Send("a");

a yazan yere basılacak tuşu yazacaksınız. Tabii harf yerine klavyenin özel tuşlarına da basmak isteyeceksiniz. Bu en doğal hakkınız. Onlar için de etraflarına süslü parantez koyacaksınız.



Onun için de aşağıdaki örneği sayabiliriz:

SendKeys.Send("{F9}");

Tüm tuşların karşılık olan kodlarını da görmek için ya da konu hakkında daha fazla bilgi almak için aşağıyı inceleyebilirsiniz:

SendKeys Class (System.Windows.Forms)

Aslında pek buraya kadar pek işe yaramıyor değil mi?



İşte burada konu başlığında da belirttiğim gibi başka uygulamaya tuş gönderme devreye giriyor.



Öncelikle "user32.dll" adlı dll dosyasını projemize import etmemiz gerekiyor. Yoksa uygulamamızın dışında bir işlem yapamayız.



Ancak dll import etmemiz için aşağıdaki komutla gerekli kütüphaneyi eklememiz gerekiyor:

using System.Runtime.InteropServices;

Daha sonra aşağıdaki komutu kullanarak dllyi import ediyoruz:

[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

Komutlarıyla import ediyoruz.



Daha sonra asıl kodlarımıza geçiyoruz.

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if (p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("Kod Evreni");
}

Yukarıdaki kodlarda ilk satırdaki kod notepad işlemini buluyor. Daha sonra öyle bir işlemin açık olup olmadığını kontrol ediyoruz. Açık ise pencereyi öne getiriyoruz ve "Kod Evreni" yazısını yazdırıyoruz.



Peki şöyle istersek; tamam exenin açık olup olmadığını kontrol ediyor. Peki açık değilse biz açalım.



İşte kodumuzun daha işe yarayacak hale gelmiş hali:

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if (p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("Kod Evreni");
}
else
{
Process islem = Process.Start("notepad.exe");
islem.WaitForInputIdle();
IntPtr h = islem.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("Kod Evreni");
}

Yazı yazmakla kalmayalım isterseniz...



Mesela bir kısayol gönderelim:

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();if (p != null){ IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("%({F4})");}else{ Process islem = Process.Start("notepad.exe"); islem.WaitForInputIdle(); IntPtr h = islem.MainWindowHandle; SetForegroundWindow(h); Thread.Sleep(2000); SendKeys.SendWait("%({F4})");}

Kodumuzun isteğimize göre şekillenmiş yukarıda.



Şimdi aslında kod topluluğumuz tamamen aynı ama tabii değişiklikler yok değil.



Öncelikle Thread.Sleep(2000) komutundan başlayalım. Bu komut 2 saniye bekleyip bir sonraki satıra geçmek için.



Peki gönderdiğimiz "%({F4})" komutu ne işe yarıyor. Şimdi bu komut bildiğimiz klasik ALT+F4 tuş kombinasyonunun kodlanmış hali. Eğer sizin için bir anlam ifade etmiyorsa muhtemelen verdiğim linkteki konuyu okumamışsınız. Aferin size
blush.png
Ya da okuduysanız da anlamamışsınız. Merak etmeyin ne işe yaradığını şimdi anlatacağım. Öncelikle verdiğim linke girdiyseniz orada tuşların kod karşılıkları yazıyordu. Çoğunun etrafında süslü parantez({}) var.



O konuyu bakacak olursak Alt'ın kod karşılığı "%" olarak görünüyor. Bizim amacımız ALT + F4 basmak değil mi? Umarım evet demişsinizdir. Evet demediyseniz konudan çıkın
blush.png




Öncelikle "%" nereden geldi diyorsanız şimdi anlamışsınızdır. % Alt tuşunun kod karşılığı olduğu için oraya yazdık. Daha sonra parantezin içine {F4} yazmışız. {F4} e kadar tamam, "{F4}" kodu F4 tuşunun kod karşılığı. Peki neden parantez içine aldık? İşte konuyu okumayan arkadaşların soracağı bir soru bu. Umarım ben defalarca konuyu okuyun dedikten sonra okumuşsunuzdur. Parantez içine almamızın sebebi Alta basık tutarken basıldığında anlamına geldiği için yanına koyduğunuz tuşa basık tutarak parantez içine basarsanız kod çalışır. Bir örnek daha verelim mesela bizim kısayollardan "Alt + Esc" tuş birleşimini koda çevirelim. Cevap "%({ESC})" olacak tabii ki. Umarım bu örnekten sonra anlamışsınızdır. Anlamayanların konunun altına yorumlarını bekliyorum...



Tabii hemen konuyu kapatmayın bitmedi!



Şimdi ise istediğimiz bir tuşu birden fazla bastırmayı göstereceğim. Şöyle de yapabiliriz; "1111111111" ancak pek pratik bir yöntem olmaz. Sizlere daha pratik olanını göstereyim:

SendKeys.SendWait("{1 10}");

Yukarıdaki komut 1'i 10 defa yazacaktır. Anlamak için notepad ile denemenizi tavsiye ederim.



1. Kural: Tuş ile sayı arasında boşluk olmalı!



2. Kural: Birden fazla basılacak tuş ve sayı süslü parantez arasında olmalı.

Kaynak : C# Tuş Bastırma Ve Başka Uygulamaya Tuş Gönderme
 
Son düzenleyen moderatör:
Üst