【问题标题】:How to get back the focus to my application automatically如何自动将焦点重新转移到我的应用程序
【发布时间】:2011-09-15 22:45:19
【问题描述】:

我正在为我的应用程序设置一个简单的“启动菜单”,(有经验的)用户可以在其中选中或取消选中各种运行选项。启动菜单是一种简单的无边框形式,以模态方式显示并带有

  • 退出按钮
  • 继续按钮,以及
  • 启动选项复选框

如果用户按住 F8 键,我会在启动应用程序时显示此启动选项对话框 - 我发现 Windows 不使用 F8,因此您实际上可以在单击我的 exe 快捷方式时按住 F8我的启动对话框打开。问题就在这里。

我的表单不会成为活动应用程序 - 而是托管我单击的快捷方式的资源管理器窗口。如果我单击我的表单(启动对话框),它将获得焦点。如何让我的启动对话框“拉”Windows 使其聚焦?

【问题讨论】:

  • 您是在复制 ntldr "UI" 吗? O_o
  • [shift] 键经常这样使用 - 例如在加载 iTunes(在 Windows 上)时按住 [shift] 可以选择或创建库。
  • @Gerry:好主意 - 我会看看这是否能解决焦点问题。
  • @Downvoter 走进光明::-) 是的,我是!
  • @Gerry:我不能使用 shift 键,因为 CLICK-SHIFT 是 Windows 功能。如果您准备在启动时插入延迟,然后测试班次状态,则班次检查有效。我希望有一个可以在程序启动时设置的关键状态。

标签: forms delphi modal-dialog focus


【解决方案1】:

一般来说,您无法集中注意力。来自 Raymond Chen 的旧新事物博客:

...窗口管理器认为没有理由让第一个实例有权占据前台。没有证据表明第一个实例会响应某些用户操作而出现在前台。

有多种方法可以解决这个问题。最简单的方法就是...

...彻底窃取焦点是错误的做法...

...仅仅因为没有好的方法做某事并不意味着您自动被允许以不好的方式做。

问题在于用户一直在向一个你的程序提供输入。你没有资格因为你想要而专注。

它可能不是你想要的答案,但它就是答案。微软一直在努力阻止试图窃取注意力的程序。您提出的任何解决方案都违反了规则,并且可能在将来的任何时候都行不通。


...仅仅因为没有好的方法做某事并不意味着您自动被允许以不好的方式做。

【讨论】:

  • 是的,当然——我也看过那篇文章。所以,我的解决方案是按规则行事。现在我提出一个系统模式 MessageBox(MB_SYSTEMMODAL 等) 来确认用户是否想要这个功能,然后显示启动对话框窗体。现在确实有效!
  • 在我看来,您最初的解决方案是完美的。如果用户按住F8(我可能选择了AltShift),则会显示“启动选项”;只要我与应用程序交互,我就可以与他们交互。
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多