반응형
여기 나오는 소스는 전역 키보드 후킹 하는 부분이다.
실제 필요한 부분은 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;
}
반응형
'공부 > 컴퓨터' 카테고리의 다른 글
[Win32/MFC] 특정 윈도우에 메세지 또는 키보드 입력 보내기 (0) | 2004.09.23 |
---|---|
[Win32/MFC] 키보드 후킹.... (0) | 2004.09.23 |
새폴더 , 새폴더(1), 새폴더(2) 만들기.... (0) | 2004.09.21 |
[MFC] 클립보드 사용하기 (0) | 2004.09.20 |
[운영체제] Process, Program, Thread 등의 설명 (0) | 2004.09.15 |