如何在.NET中控制Windows应用程序的重点

时间:2010-01-19 09:24:45

标签: c# winforms focus pinvoke user32

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

2 个答案:

答案 0 :(得分:2)

您可以通过调用

来检测您的窗口是否为活动窗口
[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

答案 1 :(得分:0)