在C#winform中,我有一个应用程序,其中有一个“静音模式”,在该模式下它被最小化并隐藏在任务栏中,AKA:
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
但是在某个时刻,我希望通过按键盘上的某个键组合再次显示程序的主窗口,例如 Alt + Ctrl + 移 + 取值 但我只是不知道该怎么做。
我解决这个问题的方式完全不同,如果用户想要取回窗口,他必须在特定目录中创建一个名为“SilentMode.OFF”的文件。 这样做会让窗户恢复原状。 我设法通过我的应用程序中的计时器执行此操作,计时器检查是否在该目录中创建了该文件,如果是,则显示该窗口。 这并不是一种专业的做事方式。
我的问:我如何与最小化窗口进行通信? 我如何发送它并使其响应我希望它响应的键?
我尝试了一些事件,比如离开事件以及其他一些事件,但实际上没有用。
任何提示都会有很大帮助,谢谢。
答案 0 :(得分:1)
AFAIK winapapi中的热键功能没有.NET包装器。但你可以通过pinvoke使用RegisterHotkey。以下是详细说明:http://www.codeproject.com/Articles/5914/Simple-steps-to-enable-Hotkey-and-ShortcutInput-us
答案 1 :(得分:-1)
你可以制作一个方法:
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
private void WaitForHotKeys()
{
if(GetAsyncKeyState(Keys.Alt) != 0 && GetAsyncKeyState(Keys.Control) != 0 &&
GetAsyncKeyState(Keys.Shift) != 0 && GetAsyncKeyState(Keys.S) != 0)
{
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
}
}
并添加加载方法:
Thread myThread = new Thread(new ThreadStart(WaitForHotKeys));
myThread.Start();