こんな感じでやってみましたが・・・
コンソールアプリではどうも引っ掛けできない
なにかダイアログだせば、その上でキーを押すとフックできるみたい
LRESULT CALLBACK KeyboardProc(int p_nCode, WPARAM p_wParam, LPARAM p_lParam)
{
if( p_nCode < 0 || p_nCode == HC_NOREMOVE ){
return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );
}
UINT uiMsg;
if( p_lParam & 0x80000000 ){
uiMsg = WM_KEYUP;
printf("**離した**");
}else{
uiMsg = WM_KEYDOWN;
printf("**押した**");
}
printf("p_wParam = %x\r\n",p_wParam);
::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );
return TRUE;
}
int main(int argc, char* argv[])
{
char cBuff[256] = "";
GetConsoleTitle(cBuff,256);
HHOOK m_hHook;
m_hHook = ::SetWindowsHookEx( WH_KEYBOARD
, (HOOKPROC)KeyboardProc
, NULL, GetWindowThreadProcessId(FindWindow(NULL,cBuff),NULL) );
if( !m_hHook ){
return FALSE;
}
while(1){
}
(UnhookWindowsHookEx(KeyboardProc);
}