我编写了一个具有模态形式的应用程序。即使启动了其他应用程序,如何确保此表单不会失去焦点?
答案 0 :(得分:10)
实际上,这正是你不应该做的事情。
有太多的程序假设他们控制着他们安装的计算机。应用程序的用户应该是可以控制的。
这就是为什么Windows的后续版本不允许窃取焦点而是坚持只是闪烁任务列表栏中的条目。
您可能会找到一种方法(尽管我对此表示怀疑),但我建议您重新考虑一下。我有兴趣知道为什么你认为这是必要的。
答案 1 :(得分:3)
您可以将“Topmost”属性设置为true,以使表单保持在所有其他属性的前面,但这不会使其保持焦点。
答案 2 :(得分:0)
您必须使对话框系统模态化。
答案 3 :(得分:0)
我用
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)
这是最后的手段