2012-03-12 14 views
5

Ok, quindi sto provando a inviare le sequenze di tasti di una stringa da e modificare la casella alla finestra attiva e il tasto Invio dopo. qualcuno qui conosce un metodo di lavoro per farlo in delphi 7?Come posso inviare chiavi ad un'altra applicazione usando delphi 7?

Sono stato alla ricerca di circa un'ora e mezza per questo ora e non riesco a trovare nulla e il materiale che ho trovato è etere per le versioni più recenti del delhi, o semplicemente non funziona. Ho provato TTouchKeyboard ma è solo per Delphi 10 e successivi.

+2

Hai provato ancora SendInput? –

+2

Deve essere Delphi? Guarda Autohotkey. –

risposta

9

Ho usato questo per inviare del testo a una fastidiosa applicazione popup 3G senza interfaccia, è un trucco se non ci è rimasta alcuna opzione.

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; 

speranza che aiuta

UPDATE

cura per consentire ad altri personaggi (non alpha) cioè spostato numeri! "£ $ ecc

+0

Thaks così tanto! :) ha funzionato! :) uomo meraviglioso. ma qualcuno sa come vorrei inviare la chiave di invio? – connorbp

+0

chiama solo TypeMessage (char (VK_RETURN)); o aggiungi char (VK_RETURN) al tuo messaggio – Dampsquid

+0

in questo modo non digita caratteri come /. oppure: come potrei farli funzionare? – connorbp

6

Vedere la funzione keybd_event. Dovrai eseguire la traduzione tra caratteri e codici di scansione della tastiera, ma internet è pieno di informazioni al riguardo.

A meno che non hai bisogno di emulare digitando, ha senso per inviare WM_SETTEXT alla finestra casella di modifica e quindi inviare Invio come una tastiera. Questo ti permetterà di evitare di gestire gli scancodes.

0

Utilizzare SendKeys() dall'unità SNDKEY32.PAS sul CD di installazione di Delphi 7. Se non riesci a trovare il tuo CD, guarda here. Funziona bene per me (Delphi7 su Windows 7)

Problemi correlati