C# 关注应用程序

C# 关注应用程序,c#,.net,vb.net,C#,.net,Vb.net,我写了一份申请表,它有一个模态形式。如何确保此表单即使在启动其他应用程序时也不会失去焦点?实际上,这正是您不应该做的事情 有太多的程序假设它们控制安装在上面的计算机。应该由应用程序的用户控制 这就是为什么更高版本的Windows不允许窃取焦点,而坚持只闪烁任务列表栏中的条目 你很可能会找到一种方法来做这件事(尽管我对此表示怀疑),但我敦促你重新思考。我很想知道你为什么认为这是必要的。事实上,这正是你不应该做的事情 有太多的程序假设它们控制安装在上面的计算机。应该由应用程序的用户控制 这就是为什么

我写了一份申请表,它有一个模态形式。如何确保此表单即使在启动其他应用程序时也不会失去焦点?

实际上,这正是您不应该做的事情

有太多的程序假设它们控制安装在上面的计算机。应该由应用程序的用户控制

这就是为什么更高版本的Windows不允许窃取焦点,而坚持只闪烁任务列表栏中的条目


你很可能会找到一种方法来做这件事(尽管我对此表示怀疑),但我敦促你重新思考。我很想知道你为什么认为这是必要的。

事实上,这正是你不应该做的事情

有太多的程序假设它们控制安装在上面的计算机。应该由应用程序的用户控制

这就是为什么更高版本的Windows不允许窃取焦点,而坚持只闪烁任务列表栏中的条目


你很可能会找到一种方法来做这件事(尽管我对此表示怀疑),但我敦促你重新思考。我很想知道您为什么认为这是必要的。

您可以将“Topmost”属性设置为true,以使窗体在所有其他窗体之前保持不变,但这不会使窗体保持焦点。

您可以设置“Topmost”属性设置为true,以使窗体在所有其他窗体前面显示,但这不会使窗体保持焦点。

必须使对话框系统处于模态。

必须使对话框系统处于模态。

我使用

SetForegroundWindow(Me.Handle)
我,把手是你表格的把手

您需要在类或winform中的某个位置声明以下内容,但不能在函数中声明

Declare Unicode Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean
根据您的喜好,您可能需要启动一个计时器,并在每10秒钟内调用SetForeGroundIndow

编辑:如果没有添加以下内容,它对我有效

    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
用这些东西包围SetforeGroundindow

    Dim _timeout As Int32
    SystemParametersInfo(&H2000, 0, _timeout, 0)
    SystemParametersInfo(&H2001, 0, 0, 3)
    SetForegroundWindow(Me.Handle)
    SystemParametersInfo(&H2001, 0, _timeout, 2)
那是我最后的选择

SetForegroundWindow(Me.Handle)
我,把手是你表格的把手

您需要在类或winform中的某个位置声明以下内容,但不能在函数中声明

Declare Unicode Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean
根据您的喜好,您可能需要启动一个计时器,并在每10秒钟内调用SetForeGroundIndow

编辑:如果没有添加以下内容,它对我有效

    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
用这些东西包围SetforeGroundindow

    Dim _timeout As Int32
    SystemParametersInfo(&H2000, 0, _timeout, 0)
    SystemParametersInfo(&H2001, 0, 0, 3)
    SetForegroundWindow(Me.Handle)
    SystemParametersInfo(&H2001, 0, _timeout, 2)

这是最后的办法

我写了一个应用程序,在我骑自行车测功仪时收听网络广播电台。我可以通过按下固定在测力计上的游戏板上的按钮来改变电台。当应用程序的焦点丢失时,我就不能再使用游戏板了。我使用的是directX框架。当应用程序的焦点丢失时,我无法再读取数据。实际上,我收回了我先前的评论:如果它是供您自己使用的软件,您有保持焦点的正当理由。也许你应该问的一个问题是“我怎样才能阻止其他应用窃取我的焦点?”我本以为,当你骑自行车时,其他应用不会启动。有不同的操作,例如,我可以用该应用启动你的tube视频。某些视频会导致脚本错误,因此浏览器控件会显示一个弹出窗口,并且主窗体的焦点丢失。您可以使用DirectX(我假设您正在使用DirectInput)以“混杂”模式从设备读取数据。我写了一个小应用程序,让你使用游戏板作为鼠标,无论哪个应用程序有焦点。如果这是您想要的,请使用SetCooperativeLevel和CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.Background作为标志。我编写了一个应用程序,在骑自行车测功仪时收听网络广播电台。我可以通过按下固定在测力计上的游戏板上的按钮来改变电台。当应用程序的焦点丢失时,我就不能再使用游戏板了。我使用的是directX框架。当应用程序的焦点丢失时,我无法再读取数据。实际上,我收回了我先前的评论:如果它是供您自己使用的软件,您有保持焦点的正当理由。也许你应该问的一个问题是“我怎样才能阻止其他应用窃取我的焦点?”我本以为,当你骑自行车时,其他应用不会启动。有不同的操作,例如,我可以用该应用启动你的tube视频。某些视频会导致脚本错误,因此浏览器控件会显示一个弹出窗口,并且主窗体的焦点丢失。您可以使用DirectX(我假设您正在使用DirectInput)以“混杂”模式从设备读取数据。我写了一个小应用程序,让你使用游戏板作为鼠标,无论哪个应用程序有焦点。如果这是您想要的,请使用SetCollaborativeLevel和CollaborativeLevelFlags.NonExclusive | CollaborativeLevelFlags.Background作为标志。“您必须使用对话框系统模式。”需要重新措辞才能更清楚。“您必须使用对话框系统模式。”需要重新措辞才能更清楚。我假设这是一个web应用程序。对吗?我假设这是一个web应用程序。对吗?