0

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

4

2 回答 2

2

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

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

你以前可以打电话

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

将您的窗口设置为前台,但微软在 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

于 2010-01-19T09:39:11.307 回答
0

这些链接应该会有所帮助:

如何在windows中获得z-order?

http://msdn.microsoft.com/en-us/library/ms632599%28VS.85%29.aspx#zorder

于 2010-01-19T09:39:12.793 回答