このブログから取得したクラスを使用しています: http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx
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);
}
この関数は単一のキーのキー コードを取得します。ctrl+C をキャッチできるように変更したかったので、上記の関数を次のように変更しました。
private static IntPtr HookCallback(
int nCode, IntPtr wParam, IntPtr lParam)
{
if ((Keys)(vkCode) == Keys.C && (Control.ModifierKeys == Keys.Control))
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
問題は、Control.ModifierKeys が常に NONE を返すことです。結果をググりすぎました。ソリューションの別のモジュールのクラスでこのコードを使用していることに注意してください。私はここで何をしていますか、解決策を提供してください。