我试图制作一个停留在后台的WPF应用程序,并在识别按键时开始工作。 我希望它大部分时间都隐藏,按下字母键时显示,并在按下空格键时消失。
我使用以下代码:
void kbdManager_LetterPressed(object sender, KeyPressedEventArgs args)
{
IntPtr hwnd = (IntPtr)User.GetForegroundWindow();
// Logic..
this.Show();
// These worked a few times but don't anymore..
// User.SetForegroundWindow(hwnd);
// User.SetFocus(hwnd);
// User.SwitchToThisWindow(hwnd, true);
// User.SetActiveWindow(hwnd);
}
void kbdManager_SpacePressed(object sender, KeyPressedEventArgs args)
{
IntPtr hwnd = (IntPtr)User.GetForegroundWindow();
this.Hide();
// It seems this.Hide changes the focus?
User.SetForegroundWindow(hwnd);
}
[DllImport("user32")]
public static extern int SetForegroundWindow(HWND hwnd);
[DllImport("user32")]
public static extern int GetForegroundWindow();
为了检查GetForegroundWindow()是否真的有效,我使用了user32.dll中的GetWindowText()方法,它似乎在大多数情况下都能正常工作。
我的问题是焦点 - 弹出我的应用程序时,我希望它显示(并保持可见,Topmost属性设置为True),然后将焦点返回到我输入的窗口,但我的应用程序得到焦点。
为了解决这个问题,我尝试使用SetForegroundWindow(),SwitchToThisWindow(),SetFocus()和SetActiveWindow()。它们似乎都不适合我。焦点偶尔会回到主窗口,但并非总是如此。我甚至尝试了不同的组合,但它仍然没有始终如一地工作。
我认为这可能与我使用我下载的键盘监听器类处理击键的事实有关,因为调试器总是把我带到那里 - 即使我在上面显示的方法中有断点。 / p>
有人可以帮忙吗?