【问题标题】:Keeping focus on previous application in WPF专注于 WPF 中的先前应用程序
【发布时间】:2026-01-01 20:00:02
【问题描述】:

我正在尝试创建一个 WPF 应用程序,触摸显示设备将使用它在第三方应用程序中输入快捷方式。

这个想法看起来很简单,类似于屏幕键盘在 Windows 上的工作方式。然而,我很快发现了一个主要障碍;虽然我可以轻松模拟输入,但我找不到将它们发送到适当应用程序或控件的方法。一旦单击按钮,前一个应用程序就会失去焦点,并且输入不会发送到正确的位置。

我进行了大量研究,但不幸的是,似乎每个人通常都试图控制同一应用程序中多个窗口的焦点。

我不确定这是否可能使用核心组件。我宁愿不必进行任何 dll 导入,但恐怕这可能是必要的。

如果您有任何我可以探索的解决方案或方向,请告诉我。

谢谢

【问题讨论】:

    标签: wpf input focus hook


    【解决方案1】:
    1. 存储焦点元素(名称/引用)。

    2. 显示虚拟键盘。

    3. 在 VK 用户控件的根级别处理按钮按下事件。从通用事件处理程序中,您可以使用其 Text 属性轻松地操作存储的焦点元素中显示的文本。您必须对各种按钮(例如(Backspace 等))使用 switch-case。由于 VKeyboard 只有最少需要的键,所以这将毫无问题地工作。

    【讨论】:

    • 您好 Anjum,您将如何在应用程序外部存储最后一个焦点元素的引用?据我所知,没有任何方法可以通过事件管理器获取应用程序外部对象的引用,而且我们不能在每个应用程序上设置挂钩,对吗?
    • 看起来你正在尝试一些黑客行为。我认为虚拟键盘显示在同一个应用程序中。但是你仍然可以使用 Win32 函数做你想做的事情。您可以获取文本框的句柄。