2011-10-18 63 views
1
procedure SendText(ds:string); 
var 
    TI: TInput; 
    KI: TKeybdInput; 
    i: integer; 
begin 
    TI.Itype := INPUT_KEYBOARD; 
    for i := 1 to Length(ds) do 
    begin 
    KI.wVk := Ord(UpCase(ds[i])); 
    KI.dwFlags := 0; 
    TI.ki := KI; 
    SendInput(1, TI, SizeOf(TI)); 
    KI.dwFlags := KEYEVENTF_KEYUP; 
    TI.ki := KI; 
    SendInput(1, TI, SizeOf(TI)); 
    end; 
end; 

如何添加Unicode?如何使用SendInput(Edit1.Text);無法使用SendInput複製俄羅斯(Cyrilic或Unicode)符號(Edit1.Text)

+1

UI自動化或MSAA是你想要的。 –

+1

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271%28v=vs.85%29.aspx MSDN文檔相當明顯 –

+0

@TLama好的,我現在就試試吧。我必須把* .pas文件放在哪裏? – Yurios

回答

6

如何使用SendInput(Edit1.Text);複製俄羅斯(Cyrilic)符號的任何建議在本例中,我使用了JEDI project的單元JclUnicode.pas。如果你有Delphi 6,那麼你可以在uses子句中省略JclUnicode。

uses 
    JclUnicode; 

procedure SendText(const Value: WideString); 
var 
    I: Integer; 
    S: WideString; 
    TI: TInput; 
    KI: TKeybdInput; 
const 
    KEYEVENTF_UNICODE = $0004; 
begin 
    S := WideUpperCase(Value); 
    TI.Itype := INPUT_KEYBOARD; 
    for I := 1 to Length(S) do 
    begin 
    KI.wVk := 0; 
    KI.dwFlags := KEYEVENTF_UNICODE; 
    KI.wScan := Ord(S[I]); 
    TI.ki := KI; 
    SendInput(1, TI, SizeOf(TI)); 
    end; 
end; 
+0

非常感謝你! – Yurios

+0

@Yurios,很高興爲您效勞;) – TLama

+0

SendText('UPPER lower 1234567890/* - +!「£$%^&*()_ + =ąčęėįšųūž');導致UER LOWER 1234567890/* - +!」£在XE2中$%^&*()_ + =ĄČĘĖĮŠŲŪŽŽ。 –