3

我是否可以知道是否可以使用键盘快捷键从系统托盘最大化我的 Windows 窗体应用程序,而不是单击它?

我目前正在最小化使用这段代码

//Minimize to Tray with over-ride for short cut
private void MinimiseToTray(bool shortCutPressed)
{
    notifyIcon.BalloonTipTitle = "Minimize to Tray App";
    notifyIcon.BalloonTipText = "You have successfully minimized your app.";

    if (FormWindowState.Minimized == this.WindowState || shortCutPressed)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(500);
        this.Hide();
    }
    else if (FormWindowState.Normal == this.WindowState)
    {
        notifyIcon.Visible = false;
    }
}

因此,我需要一个可以最大化它的键盘快捷键。非常感谢!

4

4 回答 4

5

编辑:如果您只是想“保留组合键”以在您的应用程序上执行某些操作,那么在我个人看来,您可以看到每个按键都转到任何其他应用程序的低级键盘钩子不仅是一种矫枉过正的做法,而且是不好的做法可能会有人认为您在进行键盘记录!坚持使用热键!

鉴于您的图标没有键盘焦点,您需要注册一个全局键盘热键。

其他类似问题:

使用 .NET 的全局热键示例:

Hotkey hk = new Hotkey();
hk.KeyCode = Keys.1;
hk.Windows = true;
hk.Pressed += delegate { Console.WriteLine("Windows+1 pressed!"); };

if (!hk.GetCanRegister(myForm))
{ 
    Console.WriteLine("Whoops, looks like attempts to register will fail " +
                      "or throw an exception, show error to user"); 
}
else
{ 
    hk.Register(myForm); 
}

// .. later, at some point
if (hk.Registered)
{ 
   hk.Unregister(); 
}
于 2012-09-14T11:09:09.543 回答
3

为此,您必须使用“Low-Level Hook”。您将在本文中找到有关它的所有信息:http: //blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

也看看这个:http: //www.codeproject.com/Articles/6362/Global-System-Hooks-in-NET

于 2012-09-14T11:07:08.937 回答
1

我赞同弗兰克关于全局键盘挂钩的建议。就个人而言,我对 CodeProject 文章“在 C# 中处理全局鼠标和键盘挂钩”有很好的体验。

正如他们在文章中所写,您可以执行以下操作:

private UserActivityHook _actHook;

private void MainFormLoad(object sender, System.EventArgs e)
{
    _actHook = new UserActivityHook();

    _actHook.KeyPress += new KeyPressEventHandler(MyKeyPress);
}

然后,您可以在MyKeyPress处理程序中调用一个打开窗口的函数。

于 2012-09-14T11:10:06.220 回答
1

如果您按照此处的指南进行操作。它将向您展示如何注册全局快捷键。

public partial class Form1 : Form
{
    KeyboardHook hook = new KeyboardHook();

    public Form1()
    {
        InitializeComponent();

        // register the event that is fired after the key press.
        hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);

        // register the CONTROL + ALT + F12 combination as hot key.
        // You can change this.
        hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);
    }

    private void hook_KeyPressed(object sender, KeyPressedEventArgs e)
    {
        // Trigger your function
        MinimiseToTray(true);
    }

    private void MinimiseToTray(bool shortCutPressed)
    {
        // ... Your code
    }
}
于 2012-09-14T11:17:46.333 回答