带firemonkey的屏幕键盘[Mac]

时间:2014-02-07 11:39:36

标签: delphi c++builder firemonkey delphi-xe4

我使用firemonkey编写了屏幕键盘

enter image description here

我用这段代码模拟关键事件:

void kbdEvent(unsigned int key, int modifiers)
{
    ::CGEventSourceRef source =
        CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
    ::CGEventRef keyDown = CGEventCreateKeyboardEvent(source,
        (::CGKeyCode)key, true);
    ::CGEventRef keyUp = CGEventCreateKeyboardEvent(source, (::CGKeyCode)key,
        false);
    CGEventSetFlags(keyDown, modifiers);
    CGEventPost(kCGHIDEventTap, keyDown);
    CGEventPost(kCGHIDEventTap, keyUp);
    CFRelease(keyUp);
    CFRelease(keyDown);
    CFRelease(source);
}

问题在于,当我按下一个键时,我的表单会获得焦点,并且目标应用程序不会收到生成的事件。如果我将以下代码放入计时器中没有问题,并且“a”将在任何可编辑目标中输入:

kbdEvent(kVK_ANSI_A, 0);

如果没有得到关注,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

OSK 需要的是 No Activate Form 。查看最受欢迎的firemonkey question 当用户单击它时,“No Activate”窗口不会成为前台窗口。当用户最小化或关闭前景窗口时,系统不会将此窗口置于前台。