공부/컴퓨터
[MFC] 조합키 눌러진것 알아 내기
찬
2004. 9. 23. 05:31
반응형
여기 나오는 소스는 전역 키보드 후킹 하는 부분이다.
실제 필요한 부분은 GetAsyncKeyState(VK_XXXX) 부분이고,
눌려진 상태면 아마도 음수가 반환되는것 같다.
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
int ScanCode = (lParam >> 16) & 0x000000ff; // 91번. 92번 일때가 WinKey 임.
BOOL bPrevState = (lParam >> 30) & 0x00000001; // 0 이면 이전 키를 놓은 상태.
BOOL bKeyUp = (lParam >> 31) & 0x00000001; // 0 이면 현재 누르기 시작한 상태.
SHORT nPressLWin = GetAsyncKeyState(VK_LWIN);
if ( nPressLWin < 0 )
{
if (ScanCode == 47)
{
CString strTemp;
strTemp.Format("%d",ScanCode);
AfxMessageBox(strTemp);
::SendMessage(hTargetWnd, WM_WINV, wParam, lParam);
}
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
실제 필요한 부분은 GetAsyncKeyState(VK_XXXX) 부분이고,
눌려진 상태면 아마도 음수가 반환되는것 같다.
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
int ScanCode = (lParam >> 16) & 0x000000ff; // 91번. 92번 일때가 WinKey 임.
BOOL bPrevState = (lParam >> 30) & 0x00000001; // 0 이면 이전 키를 놓은 상태.
BOOL bKeyUp = (lParam >> 31) & 0x00000001; // 0 이면 현재 누르기 시작한 상태.
SHORT nPressLWin = GetAsyncKeyState(VK_LWIN);
if ( nPressLWin < 0 )
{
if (ScanCode == 47)
{
CString strTemp;
strTemp.Format("%d",ScanCode);
AfxMessageBox(strTemp);
::SendMessage(hTargetWnd, WM_WINV, wParam, lParam);
}
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
반응형