2016-12-08 23 views
-2

フォームを作成し、いくつかのボタンを追加しました。 代わりに、ボタンが何をするのかを正確に行うには、ctrl + NumpadKey1を押したがります。 したがって、バックグラウンドでプログラムにアクセスする必要があります。C#バックグラウンドで処理中のキーアクション

誰にもアイデアはありますか? フォームが正面にあるときは、すでにコードを取得しています。

+0

、編集したりしてくださいあなたがダウンして投票する前に削除してください。 –

+0

問題が解決したら削除します。編集しない場合は、ありがとう@RustamUmarov –

答えて

1

グローバルフックを試してください。 This articleはこれを行う方法を説明します。あなたは外しする必要が最後に

[DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = true)] 
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); 

[DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
private static extern bool UnhookWindowsHookEx(IntPtr hhk); 

を、これはあなたがハンドラを作成する方法です。一言で言えば、あなたはフックを設定する必要が

private static LowLevelKeyboardProc _proc = HookCallback; 

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); 

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { 
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { 
     int vkCode = Marshal.ReadInt32(lParam); 
     Console.WriteLine((Keys)vkCode); 
    } 

    return CallNextHookEx(_hookID, nCode, wParam, lParam); 
} 
関連する問題