2012-03-12 63 views
5

好了,差不多我试图发送一个字符串和编辑框的击键到活动窗口和回车键后。有没有人在这里知道在德尔福7这样做的工作方法?如何将密钥发送到使用delphi 7的另一个应用程序?

我一直在寻找了约一个小时半,这和我不能似乎发现了什么,我已经找到了东西醚德尔福的新版本,或者它只是不工作。我试过TTouchKeyboard,但这只适用于delphi 10和更新版本。

+2

您是否尝试过SendInput? – 2012-03-12 19:23:59

+2

它是否必须是Delphi?看看Autohotkey。 – 2012-03-12 19:30:56

回答

9

我用这个来发送文本与无界面的恼人的弹出3G应用,它的黑客攻击是我们wern't留下任何选项。

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; 

希望帮助

UPDATE

编辑以允许其他字符(非字母),即从单位转向数字!“£$等

+0

泰克斯这么多! :)工作! :)真棒的人。但有谁知道我会如何发送输入密钥? – connorbp 2012-03-12 19:45:46

+0

肯定只是调用TypeMessage(char(VK_RETURN));或者添加char(VK_RETURN)到你的消息 – Dampsquid 2012-03-12 19:47:35

+0

这种方式不会输入像/这样的任何字符。或者:我如何让这些工作? – connorbp 2012-03-12 20:01:21

6

keybd_event功能。您需要在字符和键盘扫描代码之间进行转换,但互联网上充满了这方面的信息。

除非您需要模拟输入,否则将WM_SETTEXT发送到编辑框窗口然后将Enter作为键盘发送是有意义的。这可以让你避免处理扫描码。

0

使用的SendKeys()德尔福7安装光盘上SNDKEY32.PAS。如果你不能找到你的CD,看here。工作正常,我(Delphi7的在Windows 7)。

相关问题