.net - 托管 .NET 运行时和窗口焦点、问题和不一致

标签 .net winapi focus

我们有一个 Win32 应用程序,它托管 .NET 运行时并从应用程序的 Win32 部分打开 .NET 管理的表单。

这些窗口总是作为模态窗口打开。

在某些机器上,当这些窗口关闭时,位于后面的 Win32 窗口不会获得焦点,但会发送到 Word、Outlook 或您可能打开的任何其他窗口后面。

此外,有时,如果我们打开这样的 .NET 窗体,然后按 alt-tab 键切换到 Word 或其他一些应用程序,然后单击我们应用程序的任务栏图标,就会出现 Win32 窗口。这当然还在等待模态.NET窗口关闭,所以当然是不能用的。如果我们按 alt-tab 切换到其他内容并最小化其他内容,那么我们的 .NET 窗口会重新出现。

不一致的部分是这只发生在一些机器上,而不是所有机器上。在包括我在内的许多机器上,它都按预期工作。每次都聚焦到正确的窗口。

我不怀疑我们做错了什么,但我无法弄清楚问题出在哪里。

有人知道我应该寻找什么吗?我们已经查看了安装的 .NET 运行时,并且由于两台这样的机器在一台机器上运行而不在另一台机器上运行,因此它们都是开发人员机器,因此它们包含相同的 .NET 服务包等。


编辑好吧,@sam ,你是对的,我们在这条车道上有一些不同的设置。两台机器都运行 Windows XP SP3,但我的运行的是经典 Windows 主题,另一台运行的是新的 XP 主题。将另一台计算机上的主题更改为经典主题可以解决问题,但将其更改回 XP 主题并没有使它再次出现。

所以现在我们有两台机器可以正常工作,但客户仍然遇到问题,即使客户显然运行的是经典主题。

最佳答案

最近我注意到窗口焦点在 Windows Vista Aero 上的设置与以前在 XP 上的设置不同。主窗口将在重新激活时接收焦点,而不是应用程序的最后一个激活窗口接收焦点。
有趣的是,将 vista 更改为旧式 Windows 主题(经典或基本),焦点将设置到最后拥有它的子窗口,就像在 XP 上一样。

您的问题可能非常不同,但也许您有不同的操作系统版本?

关于.net - 托管 .NET 运行时和窗口焦点、问题和不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211634/

相关文章:

c# - 嵌套using语句和微软代码分析

c# - 从扩展方法动态添加新的对象属性

c# - c# 中的类(使用 filehelpers)- 可空字符串在其他可空类型不存在时给出错误

html - 如何通过更多的一键按钮将焦点设置在表单上?

.net - Silverlight 业务线应用程序

node.js - 在 Node js 中获取浏览器选项卡标题

c++ - Floodfill 替换为 GDI?

c# - 为什么通过 timeBeginPeriod 增加定时器分辨率会影响功耗?

c# - 如何在 xamarin 中获得焦点 VisualElement?

android - 禁用焦点上的橙色轮廓突出显示