追記: HookからVKとるには次のようにする
LPKBDLLHOOKSTRUCT pKey = (LPKBDLLHOOKSTRUCT) lParam;
pKey->vkCode でとれる
書き換えるトキは、pKey->scanCodeも一緒に書き換えないとだめ
サンプル:
LRESULT CALLBACK MyKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode < 0 || nCode != HC_ACTION) return CallNextHookEx(hHook, nCode, wParam, lParam); LPKBDLLHOOKSTRUCT pKey = (LPKBDLLHOOKSTRUCT) lParam; LPCTSTR event[5] = { _T(""), _T("KD"), _T("KU"), _T("SD"), _T("SU") }; int i = 0; if(wParam == WM_KEYDOWN) i = 1; if(wParam == WM_KEYUP) i = 2; if(wParam == WM_SYSKEYDOWN) i = 3; if(wParam == WM_SYSKEYUP) i = 4; // Fn + カーソルで PgDn, PgUp, Home, End にすげかえ switch( pKey->vkCode) { case 0x14: return TRUE; //CAPS Lockしね; case 0xB1: pKey->vkCode = 0x24; pKey->scanCode = 0x47; break; case 0xB0: pKey->vkCode = 0x23; pKey->scanCode = 0x4f; break; case 0xB2: pKey->vkCode = 0x21; pKey->scanCode = 0x49; break; case 0xB3: pKey->vkCode = 0x22; pKey->scanCode = 0x51; break; } CString str; str.Format(_T("%s [%x %x], %x, f:%x, e:%x"), event[i], pKey->vkCode, pKey->scanCode, pKey->time, pKey->flags, pKey->dwExtraInfo ); // AfxMessageBox(str); SetWindowText(g_hwnd, str); return CallNextHookEx(hHook, nCode, wParam, lParam); // return TRUE; }