【问题标题】:How to control windows application focus in .NET如何在 .NET 中控制 Windows 应用程序焦点
【发布时间】:2011-01-06 17:40:12
【问题描述】:

我正在使用 pinvoke "user32.dll" 将我的应用程序发送回(在所有其他应用程序之后),因此它位于桌面上,反之亦然。目前它只是切换 - 后/前。有没有办法检测我的应用程序是在后面并将其带到前面,还是在前面并将其发送到后面?谢谢。

【问题讨论】:

    标签: c# winforms focus pinvoke user32


    【解决方案1】:

    你可以通过调用来检测你的窗口是否是活动窗口

    [DllImport("user32.dll")] static
    static extern IntPtr GetForegroundWindow();
    

    你以前可以打电话

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);
    

    将您的窗口设置为前台,但 Microsoft 在 Windows ME/2000 及更高版本(可能是 XP?)中更改了它的功能。

    针对此问题有多种变通方法尝试,您可能需要测试一些以查看哪种方法适合您。

    http://www.tek-tips.com/faqs.cfm?fid=4262

    http://markribau.org/blog/?p=7

    我记得读过有关可以设置为允许 SetForegroundWindow 按需要工作的注册表项,但它是系统范围的设置。

    http://www.delphipages.com/forum/showthread.php?t=198261

    您可以使用 SetWindowPos 将您的窗口置于其他窗口的后面,如果有帮助,您可以将其永久置于顶部

    http://www.pinvoke.net/default.aspx/user32.SetWindowPos

    http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 2020-10-02
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多