次のコードをhttp://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspxからコピーしました。
public int hookProc(int code, int wParam, ref keyboardHookStruct lParam)
{
if (code >= 0)
{
Keys key = (Keys)lParam.vkCode;
if (HookedKeys.Contains(key))
{
KeyEventArgs kea = new KeyEventArgs(key);
if((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
{KeyDown(this, kea) ;}
else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
{KeyUp(this, kea); }
if (kea.Handled)
{return 1;}
}
}
lParam.vkCode ++;
lParam.scanCode ++;
return CallNextHookEx(hhook, code, wParam, ref lParam);
}
正常に動作しますが、少し変更すると次のようになります。
lParam.vkCode ++;
or
lParam.scanCode ++;
CallNextHookEx(...)が返される直前でも、元のキーはメモ帳に表示されたままです。元。「a」を押すと、メモ帳の文字は「b」になると思いますが、それでも「a」です。「lParam」は変わらないようです。理由がわかりませんでしたか?