继续关注应用程序

时间:2008-09-27 13:30:37

标签: c# .net vb.net

我编写了一个具有模态形式的应用程序。即使启动了其他应用程序,如何确保此表单不会失去焦点?

4 个答案:

答案 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)

这是最后的手段