【发布时间】:2018-03-31 04:59:12
【问题描述】:
我尝试了以下代码:
[DllImport("user32.dll")]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern IntPtr SetFocus(IntPtr hwnd);
void TakeFocus()
{
var process = Process.GetProcessesByName("myProcess").FirstOrDefault();
if (process != null)
{
// Tried each of the following:
ShowWindow(process.MainWindowHandle, 1);
ShowWindow(process.MainWindowHandle, 3);
ShowWindow(process.MainWindowHandle, 9);
ShowWindow(process.MainWindowHandle, 5);
SetFocus(process.MainWindowHandle);
SetForegroundWindow(process.MainWindowHandle);
}
}
我有一个 WPF 配套应用程序,它在后台运行,而 UWP 应用程序在前台运行。它们通过 WebSocket 进行通信。我正在尝试在 WPF 应用程序中创建一个方法,以便它(或任何其他窗口)可以从激活的 UWP 应用程序中窃取焦点,将其发送到挂起状态。我尝试的任何方法似乎都不起作用,并且没有办法在不使用 Launcher 类的情况下以编程方式使 UWP 应用程序自行暂停 AFAIK(这对我来说不是一个选项,除非有一种方法可以在不实际启动某些东西的情况下调用它——我无法去做这个)。通常我会认为它无法完成,但我已经看到了这样做的程序。例如,Steam 大画面模式会在 UWP 应用从后台进程启动时窃取其焦点。
【问题讨论】:
-
您是否尝试设置键盘焦点?这似乎有点明显,但是...
-
谢谢,我没试过。不幸的是,它没有用。我会把它添加到问题中。
标签: c# wpf uwp windows-10