2008-08-06 54 views
34

瞻窗口到前在C#我写需要把外部应用程序的窗口到前台应用程序,并且不一定是偷焦点(有一个设置用户可以切换到偷/不偷焦点)。使用Win32 API

有关使用win32 API的最佳方法是什么?我尝试过SetForeground(),但它总是偷窃焦点,并且不一致。

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

回答

14

SetForegroundWindow应该偷对焦和有某些情况下,它会失败。

SetForegroundWindow函数将创建指定窗口的线程放到前台并激活窗口。键盘输入指向窗口

尝试在拨打电话之前用SetCapture捕获焦点。还要研究将窗口置于最前面的不同方式:SetForeGroundWindow,SetActiveWindow,甚至模拟鼠标点击都可以做到这一点。

2

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

5

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

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

2

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

1

SetWindowPos + SWP_NOACTIVATE完成这项工作。

0

你可以使用FindWindow函数来获取窗口的HWND,然后使用Win32 API中发现的BringWindowToTop功能。