使用VB6应用程序时出现问题,将对话框放在前面并专注于Windows 7

时间:2012-05-31 10:43:04

标签: windows-7 com vb6 activex

我有一个用Visual Basic 6编写的小型实用程序应用程序,它已经在XP客户端上运行了很多年,直到最近使用Windows 7的客户端通知并告诉我行为不同。

当我的VB应用程序显示该对话框时,它将一直隐藏,直到用户在任务栏中单击它为止。

我更改了代码而不是使用“.show vbModal”命令,我改为使用非模态显示表单,然后添加了各种API调用,如BringWindowToFront和SetWindowPos,使其成为最顶级的AND调用.focus on尽管有这些额外的说明,我可以实现的最佳结果是使表单闪烁提示用户点击它。

无论我尝试过什么,我都无法将窗口显示在最顶层,并且无需用户干预即可专注。

请注意。这是一个ActiveX exe项目,由Win16应用程序通过COM调用。

是否有其他人遇到此行为并知道解决方案?

任何建议/意见表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:5)

应用程序不能(不说谎)窃取焦点。调用应用程序应该真正调用AllowSetForegroundWindow()(如果它在win16上可用)以允许COM进程窃取焦点,或者调用SetForegroundWindow()本身。

有关设置焦点的条件,请参阅SetForegroundWindow()的帮助。