Şimdi Ara

<< C# da her zaman aktif calisan karakter yollayan program >>

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
3.683
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • selamlar,
    Visual C# da,

    bir form ve de icinde bir button umuz var;
    formumuz hep en ustte(always top)
    buttona basildiginda "A" karakterini yollamasını istiorum fakat her zaman calismali ister oyun ister notepad her zaman en ustte ve aktif olmali.. user32.dll yada artk nasil mumkunse??? bir nevi windows sanal klavyesi onscreen keyboard u gibi calismali..

    cok tesekkurler..



  • İyide bu istediğini zaten windowsun sanal klavyesi ile yapabiliyorsun. Ayarlar- Her zaman üstte seçili geliyor ya zaten ayrıca sorması ayıp bunu Knight online da falan mı kullanacaksın yoksa
  • yok hayır bunu baska bi projede kullanmam lazım, sanal klavyeye benzer c# da yazılmıs ornek de bulamadım ah bi bulsam:) yok knight online oynamıorum:)
  • şöyle bir link buldum incele istersen
    http://www.devhood.com/messages/message_view-2.aspx?thread_id=74673

    ayrıca google da virtual keybord in c# şeklinde aratabilirsin.
  • private void button1_Click(object sender, EventArgs e) 
    {
    SendKeys.Send("A");
    }
  • quote:

    Orjinalden alıntı: sehlor

    private void button1_Click(object sender, EventArgs e) 
    {
    SendKeys.Send("A");
    }




    bu sadece form secili oldugunda calisio ne yazikki:( yane bi notepad e "A" yazamioruz:(

    tesekkurler gene de..
  • quote:

    Orjinalden alıntı: algool


    quote:

    Orjinalden alıntı: sehlor

    private void button1_Click(object sender, EventArgs e) 
    {
    SendKeys.Send("A");
    }




    bu sadece form secili oldugunda calisio ne yazikki:( yane bi notepad e "A" yazamioruz:(

    tesekkurler gene de..


    notepad e "A" yazman icin user32.dll in icindeki FindWindow() ve SetActiveWindow() Methodlarini Kullanman lazim
    FindWindow ile bir Programin Handle ini Alip SetActiveWindow ile Bu Programin Aktifle$mesini Saglayabilirsin Bunlari yaptiktan Sora Sendkeys Cali$acaktir.

    Ornek:
     

    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(IntPtr Handle,string Caption);

    [DllImport("user32.dll",SetLastError=true)]
    private static extern IntPtr SetActiveWindow(IntPtr hWnd);

    [DllImport("user32.dll")]
    private static extern int SetFocus(IntPtr hWnd);

    [DllImport("user32.dll", SetLastError = true)]
    private static extern int EnableWindow(IntPtr hWnd,bool Enable);

    [DllImport("user32.dll", SetLastError = true)]
    private static extern int SetForegroundWindow(IntPtr hWnd);

    private void frmMain_Load(object sender, EventArgs e)
    {
    IntPtr Handle = FindWindow(IntPtr.Zero, "Untitled - NotePad");
    if (Handle != IntPtr.Zero)
    {
    SetForegroundWindow(Handle);
    SetActiveWindow(Handle);
    SetFocus(Handle);
    EnableWindow(Handle, true);
    SendKeys.Send("A");
    }
    else
    {
    MessageBox.Show("NotePad Bulunamadi...");
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi sehlor -- 2 Temmuz 2008; 1:45:47 >




  • cok tesekkur ederim sehlor,

    fakat windows daki sanal klayve yada onscreen keyboard gibi herseye etki edebilen, sadece notepad olmayan bi form nasil yapilabilir..?

    cok kolpa olsada :) sole bi kod yazdim, yapabildi fakat her zaman ustte duramio ne yazikki, fakat her yere "A" yazabilio klavyeden yazılmıs gibi..

    showwindow ozelligini kullandim

    [DllImport("user32.dll")] 
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    private void button1_Click(object sender, EventArgs e)
    {
    ShowWindow(this.Handle, 6);
    SendKeys.Send("A");
    ShowWindow(this.Handle, 1);
    }
  • Formun AlwaysOnTop ozelligini True Yapmalisin.
    Heryere Gonderecegi Harf ise Programda Koruma Yoksa ( Di$ardan Gelen Bilgi Kabul Ediyosa ) Yapabilirsin Aksi Takdirde Programin Korumasini Kirmalisin..
  • ben satjyerim bana da bu çalışmayı verdiler ama benim programda handle ve hook kullanmam gerekiomuş... bunlar ne işe yarıo bilgiverebilecek olan varsa çok sevinirimm..teşekkürler..
  • formunun hep görünür olması için always on top vs. özelliklerinden yararlanmak lazım bu kolay.

    onun dışında aktif olan window'un handle'ını GetForegroundWindow() ile alıp, bu handle'ı kullanarak SendMessage() ile önce WM_KEYDOWN sonra WM_CHAR sonra WM_KEYUP göndermelisin pencereye. Bu şekilde klavyeden tuş basıldığında pencereye giden win mesajlarının aynısını simüle edersin. Klavyeden bastığında olduğu gibi ilgili pencerenin aktif kontrolü enabled değilse yazamaz dolayısıyla. Yukarda bir arkadaşın korumadan kastettiği bu sanırım.

    Key down ve Key Up ile karakter gönderirken virtual key code kullanman gerek. Klavyedeki normal karakterler için ascii kodu ile aynı, yani karakteri (char) unsigned int 'e cast edip kullanabilirsin. WM_CHAR için de geçerli aynısı.

    Verdiğim iki API call'da user32.dll 'de. static extern metodlar olarak tanımlarsan kullanabilirsin, metodların signature'larını gugıldan bulabilirsin (bkz gugıl: extern signature GetForegroundWindow)

    stajyer arkadaş için :

    handle : temelde CreateWindow ile yaratılan her nesnenin, pencerenin sahip olduğu unique ayıraç long yada unsigned long hatırlamıyorum tam(bkz windows SDK -> CreateWindow()). Windows mesajları bu handle kullanılarak transfer ediliyor. Evet bu yüzden handle kullanmak gerekli. HWND, Handle vs. gibi çeşitli tipler var çeşitli API ve dillerde.

    hook : hook da kaçak elektrik için elektrik direğine kanca atmayı çağrıştırıyo bana, klavye yada mouse yada başka devicelar için hook kullanırsan, bunlardan gelen interruptlar senin processinden geçtikten sonra event chain'de dolaşmaya devam ediyor, evesdropping bi nevi. Bu arkadaşın istediği iş için pek kullanılması gerekli gibi değil. Nasıl yapıldığına ilişkin detaylı bilgim yok.




  • Hi ma name is Faizi i am a student and i own a techno website where all the latest updates are kept about social networking apps like http://traffickk.com/www-gmail-com-login-signin-signup/ and many more
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.