使用Win32 API在C#中将窗口置于前端

我正在编写一个应用程序,需要将外部应用程序的窗口置于前台,并且不一定会窃取焦点(用户可以切换设置以窃取/不窃取焦点)。

使用win32 API去解决这个问题的最好方法是什么?我尝试过SetForeground(),但它总是偷窃焦点并且不一致。

什么是最好的方式去做这件事?有什么想法吗?

0
额外
意见: 1

5 答案

你有没有尝试过使用SetWindowPos。这是在Windows中移动,调整大小和设置z顺序的规范函数。有一个SWP_NOACTIVATE标志可以使用。查看 http://msdn.microsoft.com/zh-cn/ -us /库/ ms633545(VS.85)的.aspx 。我还没有在属于另一个进程的窗口上尝试过,但可能值得一试。

0
额外

您可以尝试使用BringWindowToTop函数不偷窃焦点。我没有使用它,但它似乎是你在找什么。

0
额外

SetForeGroundWindow,SetActiveWindow和BringWindowToTop有什么区别?看起来好像他们都做同样的事情。

根据MSDN,SetForeGroundWindow将激活该窗口并将键盘焦点指向它。即使您的流程处于后台,也会尝试工作。 SetActiveWindow与SetForeGroundWindow的作用相同,但如果您的应用程序不是最前面的应用程序,它不会执行任何操作。最后,BringWindowToTop只会将窗口置顶,而不会改变键盘焦点。

0
额外

SetWindowPos + SWP_NOACTIVATE完成这项工作。

0
额外

您可以使用FindWindow获取窗口的HWND,然后使用Win32 API中的BringWindowToTop函数。

0
额外