2009-07-15 14 views
0

以下のコードを使用して、Ctrl + Alt + Qホットキーをキャプチャしています。これは完全に機能します。 しかし、私はこれをバックグラウンドアプリケーションで使いたいです。私のアプリケーションはフォームを持っていないので、私はクラスファイルの中で同じコードを使いたいと思っています。C#を使用してスレッドからホットキーを取得する。

クラスファイルにイベントハンドラ[keypressed]を書き込むことができないので、私は混乱しています。 代わりに、私はスレッドでkeypressを使いたいです。

助けてください。

public DialogResult Result; 
    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. 
     hook.RegisterHotKey((ModifierKeys)2 | (ModifierKeys)1, Keys.Q); 
    } 

    void hook_KeyPressed(object sender, KeyPressedEventArgs e) 
    { 

     Result = MessageBox.Show("Are you sure, you want to log off?","Log off" 
       ,MessageBoxButtons.YesNo 
       ,MessageBoxIcon.Warning); 

     if (Result == DialogResult.Yes) 
     { 

     } 
     else 
     { 

     } 
    } 

答えて

2

フォームなしでグローバルホットキーをキャプチャしたい場合、私は恐れることができません。

理由は、グローバルホットキーは、ウィンドウハンドルに送信されることである(別名、とのWndProcで処理。メッセージポンプ)

だから、基本的にWindowsが動作する方法、あなたがそれらを受信するためのフォームなしグローバルホットキーを使用することはできません。

これはあなたがやりたがっていることを完全には確信していません。しかし、もう一方ではフォームのないローカルホットキーもないので、他に何があるかわかりません。

あなたの質問をさらに明確にしたい場合があります(犯罪はありません)

+0

いいえ、私はフォームを使ってそれを行います。しかし、フォームを見えないようにする方法はありますか?それはタスクバーにさえいないでしょう。 可能ですか?ありがとう。 – Anuya

+0

はい、可能です。私のアプリが見えなくても、私はホットキーをキャプチャして前面に持っていきます。 –

+0

私は以下を使用していますが、依然として私はフォームを取得しています。 プライベートvoid InitializeComponent() { this.SuspendLayout(); // // Form1 // this.Visible = false; this.ShowInTaskbar = false; } – Anuya

関連する問題