Vista窗口焦点问题

时间:2008-10-08 19:01:55

标签: windows winforms windows-vista usability

我有一个管理患者人口统计信息的应用程序。与该数据一起,用户可以扫描患者的图片并将该图片分配给患者。当用户单击扫描按钮时,将打开一个单独的应用程序作为对话框以扫描图像。在XP上运行时一切正常。成像应用程序很好地加载并获得了关注。然而,在Vista上,有时候成像应用程序不会获得焦点,并且会弹出主应用程序。当全屏运行或通过2008 Application Server无法看到应用程序时,您只能看到一个锁定的屏幕,似乎没有任何事情发生。有没有办法改变Vista上的窗口焦点管理以像XP那样工作?我正在寻找一种方法来解决这个问题,如果可能的话,不用改变实际的应用程序。

4 个答案:

答案 0 :(得分:1)

我认为您必须对应用程序进行更改才能使成像应用程序成为焦点。我将假设您的应用程序通过ShellExecuteCreateProcess启动映像应用程序。如果是这样,您可以通过SHELLEXECUTEINFO.hProcess(针对ShellExecute)或PROCESS_INFORMATION.hProcess(针对CreateProcess)获取已启动流程的流程处理。启动映像应用程序后立即调用AllowSetForegroundWindow API:

AllowSetForegroundWindow(GetProcessId(hProcess));

这将允许成像应用程序在启动时将其主窗口/对话框置于前台。

答案 1 :(得分:1)

您可以尝试以下步骤:
1.右键单击exe
2.选择属性
3.选择兼容性选项卡
4.检查在campcability模式下运行此程序:
5.选择Windows XP(Service Pack 2)

答案 2 :(得分:0)

您可以遍历所有顶级HWND并通过其窗口类识别扫描应用程序,然后发送相应的消息以提升窗口。

答案 3 :(得分:0)

我不相信这是Vista与XP相关的。我认为只是这个成像应用程序需要更长的时间才能启动Vista。 从Windows 2000开始,窗口管理器阻止了后台应用程序窃取前景。启动应用程序时,它有一个创建和显示将占据前景的窗口的机会窗口。如果花费太长时间,窗口管理器会认为当前窗口应保持前景,并禁止其他应用程序在最终启动时占据前景。

除了使用FindWindow在启动应用程序后搜索其他应用程序窗口之外,我想不出任何具体的方法来避免这种情况。当你最终找到它时,在它上面调用SetForegroundWindow将它带到前台。