【发布时间】:2008-09-27 13:30:37
【问题描述】:
我编写了一个具有模态表单的应用程序。如何确保此表单即使在启动其他应用程序时也不会失去焦点?
【问题讨论】:
-
我假设这是一个 Web 应用程序。对吗?
我编写了一个具有模态表单的应用程序。如何确保此表单即使在启动其他应用程序时也不会失去焦点?
【问题讨论】:
实际上,这正是你不应该做的事情。
周围有太多的程序假设它们控制着它们所安装的计算机。应该由您的应用程序的用户来控制。
这就是为什么更高版本的 Windows 不允许窃取焦点,而是坚持只闪烁任务列表栏中的条目。
您很可能会找到一种方法来做到这一点(尽管我对此表示怀疑),但我敦促您重新考虑一下。我很想知道你为什么认为这是必要的。
【讨论】:
您可以将“Topmost”属性设置为 true 以使表单保持在所有其他表单的前面,但这不会使其保持焦点。
【讨论】:
您必须使对话系统模态化。
【讨论】:
我用
SetForegroundWindow(Me.Handle)
Me.Handle 是表单的句柄。
您需要在类或 winform 中的某处声明以下内容,而不是在函数中
Declare Unicode Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean
您可能需要启动一个计时器并在每 10 秒的滴答声上调用 SetForegroundWindow,具体取决于您的偏好。
编辑:它适用于我,如果它不添加以下内容
Declare Unicode Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoW" (ByVal uiAction As Int32, ByVal uiParam As Int32, ByRef pvParam As Int32, ByVal fWinIni As Int32) As Int32
并用这些包围 SetForegroundWindow
Dim _timeout As Int32
SystemParametersInfo(&H2000, 0, _timeout, 0)
SystemParametersInfo(&H2001, 0, 0, 3)
SetForegroundWindow(Me.Handle)
SystemParametersInfo(&H2001, 0, _timeout, 2)
这是最后的手段
【讨论】: