Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将按键(按键)发送到最小化(非聚焦)表单?_C#_Winforms - Fatal编程技术网

C# 如何将按键(按键)发送到最小化(非聚焦)表单?

C# 如何将按键(按键)发送到最小化(非聚焦)表单?,c#,winforms,C#,Winforms,在C#winform中,我有一个应用程序,其中有一个“静默模式”,在该模式下,它被最小化并隐藏在任务栏中,也称为: this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; 但在某一点上,我希望通过按键盘上的某个组合键(例如Alt+Ctrl+Shift+S),程序的主窗口再次显示 但我就是不知道该怎么做 我处理这个问题的方式完全不同,如果用户想要恢复窗口,他必须在特定目录中创建一个名为“SilentMod

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

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
但在某一点上,我希望通过按键盘上的某个组合键(例如Alt+Ctrl+Shift+S),程序的主窗口再次显示 但我就是不知道该怎么做

我处理这个问题的方式完全不同,如果用户想要恢复窗口,他必须在特定目录中创建一个名为“SilentMode.OFF”的文件。 这样做会让窗户重新打开。 我在我的应用程序中通过一个计时器完成了这项工作,计时器会检查该文件是否是在该目录中创建的,如果是,则显示窗口。 不,这不是一种真正的职业方式

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

我尝试了一些活动,如“离开”和其他一些活动,但没有真正起作用


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

AFAIK winapapi中没有热键函数的.NET包装器。但您可以通过pinvoke使用RegisterHotkey。下面是一个详细的解释:

您可以创建如下方法:

[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();

我想你会发现如何使用[this][1]和[this][2][1]:[2]: