转到非活动窗口

时间:2018-11-21 15:01:19

标签: c# wpf window pinvoke topmost

我有两个WPF应用程序。两者都有一个窗口,其Topmost属性设置为true。第一个应用程序的窗口是全屏窗口,第二个应用程序仅占据部分屏幕。同样重要的是,第二个应用程序无法激活(以下代码阻止了激活):

private const int GWL_EXSTYLE = -20;
private const int WS_EX_NOACTIVATE = 0x08000000;

[DllImport("user32.dll")]
public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex,int dwNewLong);
[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr hWnd,int nIndex);

protected override void OnSourceInitialized(EventArgs e)
{
    WindowInteropHelper helper = new WindowInteropHelper(window);
    SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
}

当用户单击放置在第一个应用程序上的按钮时,我正在尝试将第二个应用程序置于前面。我试图通过使用SetForegroundWindowShowWindow来实现这一点,但是它不起作用。有人对此问题有解决方案吗?

1 个答案:

答案 0 :(得分:1)

尝试

yourSpecificWindow.Activate();

如果不能解决问题,还包括

yourSpecificWindow.TopMost = true;
yourSpecificWindow.Focus();