2012-03-12 16 views
5

Tamam, öyleyse bir dizeden tuşa basıp etkin pencereye ve enter tuşuna basmaya çalışıyorum. Burada delphi 7'de bunu yapan bir çalışma yöntemi var mı?Delphi 7'yi kullanarak başka bir uygulamaya nasıl anahtar gönderebilirim?

Şu an için yaklaşık bir buçuk saat ara veriyorum ve bir şey bulamıyorum ve bulduğum şeyler delphi'nin yeni sürümleri için eter, ya da işe yaramıyor. Ben TTouchKeyboard denedim ama sadece delphi 10 ve daha yeni.

+2

Henüz SendInput'u denediniz mi? –

+2

Delphi olmak zorunda mı? Autohotkey'e bakın. –

cevap

9

Hiçbir arabirim olmadan rahatsız edici bir popup 3G uygulaması için metin göndermek için kullandım, bir hack biz herhangi bir seçenek ile bırakılmış olmamalıdır. (Non alfa) diğer karakterleri izin vermek

GÜNCELLEME

Düzenlendi yardımcı

procedure TForm1.TypeMessage(Msg: string); 
var 
    CapsOn: boolean; 
    i: integer; 
    ch: char; 
    shift: boolean; 
    key: short; 
begin 
    CapsOn := (GetKeyState(VK_CAPITAL) and $1) <> 0; 

    for i:=1 to length(Msg) do 
    begin 
    ch := Msg[i]; 
    ch := UpCase(ch); 

    if ch <> Msg[i] then 
    begin 
     if CapsOn then 
     begin 
     keybd_event(VK_SHIFT, 0, 0, 0); 
     end; 
     keybd_event(ord(ch), 0, 0, 0); 
     keybd_event(ord(ch), 0, KEYEVENTF_KEYUP, 0); 
     if CapsOn then 
     begin 
     keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 
     end; 
    end 
    else 
    begin 
     key := VKKeyScan(ch); 
     // UpperCase 
     if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or 
     ((key and $100) > 0) then 
     begin 
     keybd_event(VK_SHIFT, 0, 0, 0); 
     end; 
     keybd_event(key, 0, 0, 0); 
     keybd_event(key, 0, KEYEVENTF_KEYUP, 0); 
     if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or 
     ((key and $100) > 0) then 
     begin 
     keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 
     end; 
    end; 
    end; 
end; 

umut yani rakamlarını değiştirdi! "Vb

+0

Çok fazla şey! :) işe yaradı! :) Harika adam. ama giriş anahtarını nasıl göndereceğimi bilen var mı? – connorbp

+0

emin sadece TypeMessage (char (VK_RETURN)); veya – Dampsquid

+0

mesajınıza char (VK_RETURN) ekleyin ve/gibi herhangi bir karakter yazmaz. veya: Bunları nasıl çalıştırabilirim? – connorbp

6

Bkz. keybd_event işlevi. Yazı ve klavye tarama kodları arasında çeviri yapmanız gerekir, ancak internet bu konuda bilgi dolu.

yazıp yazıp göndermeniz gerekmedikçe, düzenleme kutusu penceresine WM_SETTEXT göndermesi ve ardından Enter tuş takımı olarak gönderilmesi mantıklıdır. Bu, tarama kodları ile uğraşmaktan kaçınmanıza izin verecektir.

0

Kullanım SendKeys £ $() biriminden Delphi 7 kurulum CD'sinde SNDKEY32.PAS.CD'nizi bulamıyorsanız, here'a bakın. Benim için iyi çalışıyor (Windows 7'de Delphi7)

İlgili konular