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

これを行うには、「低レベルフック」を使用する必要があります。この記事でそれに関するすべての情報を見つけることができます: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

こちらのガイドに従えば。グローバルショートカットキーを登録する方法を説明します。

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 に答える
1

私はグローバルキーボードフックについてのフランクの提案を2番目にしています。個人的には、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 に答える