2016-07-16 7 views
0

私は、グローバルに上書きすることなく、私のWindowsフォームのグローバルキープレスを取得しようとしています。私はKeypress = trueを設定しようとしただけでは、フォームがアクティブな場合は押されたキーを取得することを、私はまた、世界的に非アクティブ形式のWindowsフォームkeypress

[DllImport("user32.dll")] 
     private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); 

     [DllImport("user32.dll")] 
     private static extern bool UnregisterHotKey(IntPtr hWnd, int id); 

を使用してキーをフックしようとしたが、それは私が行うにはしたくないキーを上書きします。上書きしないでキープレスをグローバルに検出できるどこかで幸せな媒体がありますか?

おかげ

+0

http://stackoverflow.com/questions/604410/global-keyboard-capture-in-c-sharp-application http://www.codeproject.com/Articles/7294/Processing-Global-Mouse - と - Keyboard-Hooks-in-C – Warty

答えて

0

あなたは、フォーム上のProcessCmdKeyを使用して試すことができます。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{  
    MessageBox.Show(keyData.ToString());   

    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

悲しいことに、私は自分のフォームクラスにそれを追加します。私のフォームがアクティブなときだけキーを検出しますが、非アクティブのときは検出しません。グローバルにキーを取得するために 'ProcessCmdKey'に追加する必要があるものはありますか? –

+0

私にはわかりませんが、どのように非アクティブなフォームをクリックしていますか?それをクリックしてもアクティブにならないのですか? – keyboardP

+0

非アクティブなフォームでは、google chromeをクリックし、フォーム上で押されたキーをアクティブにしないキーをクリックします。基本的には、フォームが現在アクティブなメインウィンドウでない場合に押されたキーを検出できます。 –

関連する問題