【发布时间】:2011-01-06 17:40:12
【问题描述】:
我正在使用 pinvoke "user32.dll" 将我的应用程序发送回(在所有其他应用程序之后),因此它位于桌面上,反之亦然。目前它只是切换 - 后/前。有没有办法检测我的应用程序是在后面并将其带到前面,还是在前面并将其发送到后面?谢谢。
【问题讨论】:
标签: c# winforms focus pinvoke user32
我正在使用 pinvoke "user32.dll" 将我的应用程序发送回(在所有其他应用程序之后),因此它位于桌面上,反之亦然。目前它只是切换 - 后/前。有没有办法检测我的应用程序是在后面并将其带到前面,还是在前面并将其发送到后面?谢谢。
【问题讨论】:
标签: c# winforms focus pinvoke user32
你可以通过调用来检测你的窗口是否是活动窗口
[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
【讨论】: