我在应用程序中有一个WPF窗口,在某些特定的情况下通过调用MainView.Activate();
和MainView.BringIntoView();
方法来激活它。它还将焦点设置在这个'MainView'窗口上。
但我的要求是这个窗口不应该获得焦点。也就是说,我的光标应该仍然停留在之前的应用程序(如记事本、Word等)上。
我尝试使用MainView.ShowActivated="False"
,但它没有起作用。
我需要像这里提到的那样使用HwndSource吗?
在Kent的帮助下我使用的代码(只有当窗口被最小化时才起作用):
IntPtr HWND_TOPMOST = new IntPtr(-1);
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
IntPtr handle = process.MainWindowHandle;
if (handle != IntPtr.Zero)
{
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}