Çözüldü C# Form ile klavyeden tuş nasıl basılır?

  • Konuyu başlatan fy93
  • Başlangıç Tarihi
  • Mesaj 6
  • Görüntüleme 318
Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

fy93

Centipat
Katılım
11 Şubat 2024
Mesajlar
883
Çözümler
7
Daha fazla  
Cinsiyet
Erkek
Merhaba,

C#:
keybd_event((int)Keys.A, (byte)MapVirtualKey((int)Keys.A, 0), 0, 0)

C# form üzerinden klavyede bulunan bir tuşa basmak için yukarıdaki kodu kullanıyorum, bu kod klavyede "A" tuşuna basıyor ama "Keys.A" kodunu Textbox1.Text'e nasıl bağlayabilirim?
 
Son düzenleyen: Moderatör:
Çözüm
TextBox'taki karakterleri okuyup onlari Enum'a cevirebilirsin. Keys bir enum.

Ve C# uzerinde enumlar string'den build edilebilirler sen ekstra bir fonksiyon yazmadan.
Enum.TryParse(typeof(Keys), TextBox1.Text, out parsedEnum);
Text'i butum halde vermek istemeyebilirsin. Tokenlere ayirabilirsin mesela yada karakter karakter islersin.

Karakter karakter islemeye ornek vereyim soyle, gelistirirsin kendin;
C#:
void pressKey(Keys key) {
    keybd_event((byte)key, 0, 0, 0);
}

void releaseKey(Keys key) {
    keybd_event((byte)key, 0, 2, 0);
}

// Burada Caps Lock'un acik olmadigini varsayiyorum. Bunu da normalde kontrol ettirmek isteyebilirsin.
void upperCaseKey(Keys key) {
    pressKey(Keys.ShiftKey);
    pressKey(key);
    releaseKey(key);
    releaseKey(Keys.ShiftKey);
}

void lowerCaseKey(Keys key) {
    pressKey(key);
    releaseKey(key);
}

void SendChar(char character)
{
    bool isUpperCase = char.IsUpper(character);
    char upperChar = char.ToUpper(character);

    if (!Enum.TryParse(upperChar.ToString(), out Keys key))
    {
        Console.WriteLine($"Unsupported character: {character}");
        return;
    }

    if (isUpperCase) upperCaseKey(key);
    else lowerCaseKey(key);
}

void SendString(string str) {
    foreach (char ch in str) {
        SendChar(ch);
    }
}

Daha farkli bir API varsa string gondermek icin ben bilmiyorum. Ancak bu tarz bi seyde ise yarar.
Teşekkür ederim. 🙏

TextBox'taki karakterleri okuyup onlari Enum'a cevirebilirsin. Keys bir enum.

Ve C# uzerinde enumlar string'den build edilebilirler sen ekstra bir fonksiyon yazmadan.
Enum.TryParse(typeof(Keys), TextBox1.Text, out parsedEnum);
Text'i butum halde vermek istemeyebilirsin. Tokenlere ayirabilirsin mesela yada karakter karakter islersin.

Karakter karakter islemeye ornek vereyim soyle, gelistirirsin kendin;
C#:
void pressKey(Keys key) {
    keybd_event((byte)key, 0, 0, 0);
}

void releaseKey(Keys key) {
    keybd_event((byte)key, 0, 2, 0);
}

// Burada Caps Lock'un acik olmadigini varsayiyorum. Bunu da normalde kontrol ettirmek isteyebilirsin.
void upperCaseKey(Keys key) {
    pressKey(Keys.ShiftKey);
    pressKey(key);
    releaseKey(key);
    releaseKey(Keys.ShiftKey);
}

void lowerCaseKey(Keys key) {
    pressKey(key);
    releaseKey(key);
}

void SendChar(char character)
{
    bool isUpperCase = char.IsUpper(character);
    char upperChar = char.ToUpper(character);

    if (!Enum.TryParse(upperChar.ToString(), out Keys key))
    {
        Console.WriteLine($"Unsupported character: {character}");
        return;
    }

    if (isUpperCase) upperCaseKey(key);
    else lowerCaseKey(key);
}

void SendString(string str) {
    foreach (char ch in str) {
        SendChar(ch);
    }
}

Daha farkli bir API varsa string gondermek icin ben bilmiyorum. Ancak bu tarz bi seyde ise yarar.

1737358590130.jpeg


1737358598651.jpeg


Hocam bir ufak sorun oldu MarVirtualKey de bulunu kabul ediyor ama Keybd_event tarafında kabul etmedi kırmızı çizdi. Nerde hata yaptım acaba.

Teşekkür ederim. 🙏



1737358590130.jpeg


1737358598651.jpeg


Hocam bir ufak sorun oldu MarVirtualKey de bulunu kabul ediyor ama Keybd_event tarafında kabul etmedi kırmızı çizdi. Nerde hata yaptım acaba.

Dün akşamdan beri bakıyorum. Şurada fotoları tekrar paylaşınca fark ettim.
Yukarıda Byte olarak tanımlamış aşağıda int olarak kullanmaya çalıştığım için hata veriyormuş 😂 Yukarıyıda int yapınca düzeldi.
Merhaba,

C#:
keybd_event((int)Keys.A, (byte)MapVirtualKey((int)Keys.A, 0), 0, 0)

C# form üzerinden klavyede bulunan bir tuşa basmak için yukarıdaki kodu kullanıyorum, bu kod klavyede "A" tuşuna basıyor ama "Keys.A" kodunu Textbox1.Text'e nasıl bağlayabilirim?
A harfini Textbox'a yazacaksanız:
Textbox1.Text += "A";
Yazmanızı öneririm ancak, sorunuza gelirsek:
Önce
Textbox1.Focus();
kodu eklerseniz çalışacaktır.
 
Yok hocam tam tersi textbox1 deki yazılanı "A" yerine atamak istiyorum.
TextBox'taki karakterleri okuyup onlari Enum'a cevirebilirsin. Keys bir enum.

Ve C# uzerinde enumlar string'den build edilebilirler sen ekstra bir fonksiyon yazmadan.
Enum.TryParse(typeof(Keys), TextBox1.Text, out parsedEnum);
Text'i butum halde vermek istemeyebilirsin. Tokenlere ayirabilirsin mesela yada karakter karakter islersin.

Karakter karakter islemeye ornek vereyim soyle, gelistirirsin kendin;
C#:
void pressKey(Keys key) {
    keybd_event((byte)key, 0, 0, 0); 
}

void releaseKey(Keys key) {
    keybd_event((byte)key, 0, 2, 0); 
}

// Burada Caps Lock'un acik olmadigini varsayiyorum. Bunu da normalde kontrol ettirmek isteyebilirsin.
void upperCaseKey(Keys key) {
    pressKey(Keys.ShiftKey);
    pressKey(key);
    releaseKey(key);
    releaseKey(Keys.ShiftKey);
}

void lowerCaseKey(Keys key) {
    pressKey(key);
    releaseKey(key);
}

void SendChar(char character)
{
    bool isUpperCase = char.IsUpper(character);
    char upperChar = char.ToUpper(character);

    if (!Enum.TryParse(upperChar.ToString(), out Keys key))
    {
        Console.WriteLine($"Unsupported character: {character}");
        return;
    }

    if (isUpperCase) upperCaseKey(key);
    else lowerCaseKey(key);
}

void SendString(string str) {
    foreach (char ch in str) {
        SendChar(ch);
    }
}

Daha farkli bir API varsa string gondermek icin ben bilmiyorum. Ancak bu tarz bi seyde ise yarar.
 
yok hocam tam tersi textbox1 deki yazılanı "A" yerine atamak istiyorum.
Dediğini anlayamadım. Ancak A tuşuna basarak bir işlem gerçekleştirceksen Key olaylarına bakabilirsin.

Birden çok şey anladım. A tuşuna basarak Textbox'un içindeki texti farklı TextBox'a mı yazdıracaksın. Dediğini açık ve net bir şekilde anlatabilir misin?
 
TextBox'taki karakterleri okuyup onlari Enum'a cevirebilirsin. Keys bir enum.

Ve C# uzerinde enumlar string'den build edilebilirler sen ekstra bir fonksiyon yazmadan.
Enum.TryParse(typeof(Keys), TextBox1.Text, out parsedEnum);
Text'i butum halde vermek istemeyebilirsin. Tokenlere ayirabilirsin mesela yada karakter karakter islersin.

Karakter karakter islemeye ornek vereyim soyle, gelistirirsin kendin;
C#:
void pressKey(Keys key) {
    keybd_event((byte)key, 0, 0, 0);
}

void releaseKey(Keys key) {
    keybd_event((byte)key, 0, 2, 0);
}

// Burada Caps Lock'un acik olmadigini varsayiyorum. Bunu da normalde kontrol ettirmek isteyebilirsin.
void upperCaseKey(Keys key) {
    pressKey(Keys.ShiftKey);
    pressKey(key);
    releaseKey(key);
    releaseKey(Keys.ShiftKey);
}

void lowerCaseKey(Keys key) {
    pressKey(key);
    releaseKey(key);
}

void SendChar(char character)
{
    bool isUpperCase = char.IsUpper(character);
    char upperChar = char.ToUpper(character);

    if (!Enum.TryParse(upperChar.ToString(), out Keys key))
    {
        Console.WriteLine($"Unsupported character: {character}");
        return;
    }

    if (isUpperCase) upperCaseKey(key);
    else lowerCaseKey(key);
}

void SendString(string str) {
    foreach (char ch in str) {
        SendChar(ch);
    }
}

Daha farkli bir API varsa string gondermek icin ben bilmiyorum. Ancak bu tarz bi seyde ise yarar.
Teşekkür ederim. 🙏

TextBox'taki karakterleri okuyup onlari Enum'a cevirebilirsin. Keys bir enum.

Ve C# uzerinde enumlar string'den build edilebilirler sen ekstra bir fonksiyon yazmadan.
Enum.TryParse(typeof(Keys), TextBox1.Text, out parsedEnum);
Text'i butum halde vermek istemeyebilirsin. Tokenlere ayirabilirsin mesela yada karakter karakter islersin.

Karakter karakter islemeye ornek vereyim soyle, gelistirirsin kendin;
C#:
void pressKey(Keys key) {
    keybd_event((byte)key, 0, 0, 0);
}

void releaseKey(Keys key) {
    keybd_event((byte)key, 0, 2, 0);
}

// Burada Caps Lock'un acik olmadigini varsayiyorum. Bunu da normalde kontrol ettirmek isteyebilirsin.
void upperCaseKey(Keys key) {
    pressKey(Keys.ShiftKey);
    pressKey(key);
    releaseKey(key);
    releaseKey(Keys.ShiftKey);
}

void lowerCaseKey(Keys key) {
    pressKey(key);
    releaseKey(key);
}

void SendChar(char character)
{
    bool isUpperCase = char.IsUpper(character);
    char upperChar = char.ToUpper(character);

    if (!Enum.TryParse(upperChar.ToString(), out Keys key))
    {
        Console.WriteLine($"Unsupported character: {character}");
        return;
    }

    if (isUpperCase) upperCaseKey(key);
    else lowerCaseKey(key);
}

void SendString(string str) {
    foreach (char ch in str) {
        SendChar(ch);
    }
}

Daha farkli bir API varsa string gondermek icin ben bilmiyorum. Ancak bu tarz bi seyde ise yarar.

1737358590130.jpeg


1737358598651.jpeg


Hocam bir ufak sorun oldu MarVirtualKey de bulunu kabul ediyor ama Keybd_event tarafında kabul etmedi kırmızı çizdi. Nerde hata yaptım acaba.

Teşekkür ederim. 🙏



1737358590130.jpeg


1737358598651.jpeg


Hocam bir ufak sorun oldu MarVirtualKey de bulunu kabul ediyor ama Keybd_event tarafında kabul etmedi kırmızı çizdi. Nerde hata yaptım acaba.

Dün akşamdan beri bakıyorum. Şurada fotoları tekrar paylaşınca fark ettim.
Yukarıda Byte olarak tanımlamış aşağıda int olarak kullanmaya çalıştığım için hata veriyormuş 😂 Yukarıyıda int yapınca düzeldi.
 
Son düzenleme:
Çözüm

Technopat Haberler

Yeni konular

Geri
Yukarı