如何将击键(按键)发送到最小化(非聚焦)形式?

时间:2012-08-25 13:53:28

标签: c# winforms

在C#winform中,我有一个应用程序,其中有一个“静音模式”,在该模式下它被最小化并隐藏在任务栏中,AKA:

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

但是在某个时刻,我希望通过按键盘上的某个键组合再次显示程序的主窗口,例如 Alt + Ctrl + + 取值 但我只是不知道该怎么做。

我解决这个问题的方式完全不同,如果用户想要取回窗口,他必须在特定目录中创建一个名为“SilentMode.OFF”的文件。 这样做会让窗户恢复原状。 我设法通过我的应用程序中的计时器执行此操作,计时器检查是否在该目录中创建了该文件,如果是,则显示该窗口。 这并不是一种专业的做事方式。

我的问:我如何与最小化窗口进行通信? 我如何发送它并使其响应我希望它响应的键?

我尝试了一些事件,比如离开事件以及其他一些事件,但实际上没有用。

任何提示都会有很大帮助,谢谢。

2 个答案:

答案 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();