=======================================================================================
삼성 SPH-M4300에서 프로그래밍 해보고 테스트도 완료했습니다. 잘되더군요.
더 자세한 정보를 알아보시려면 다음의 뉴스그룹을 참조하시고:
http://groups.google.com/group/microsoft.public.windowsce.app.development/browse_thread/thread/e0243550d63d8f63/2bba7323170c798a?lnk=st&q=pocket+pc+SetWindowsHookExW&rnum=5#2bba7323170c798a
샘플 코드 보여드립니다:
extern "C" { typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);
typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; // virtual key code DWORD scanCode; // scan code DWORD flags; // flags DWORD time; // time stamp for this message DWORD dwExtraInfo; // extra info from the driver or keybd_event } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
HHOOK WINAPI SetWindowsHookExW( int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId ); BOOL WINAPI UnhookWindowsHookEx( HHOOK hhk ); LRESULT WINAPI CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ); LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ); #define SetWindowsHookEx SetWindowsHookExW
}
HHOOK hKeyboardHook = 0;
#define HC_ACTION 0 #define PPC_KEY_APP1 0xc1 #define PPC_KEY_APP2 0xc2 #define PPC_KEY_APP3 0xc3 #define PPC_KEY_APP4 0xc4 #define PPC_KEY_APP5 0xc5 #define PPC_KEY_SCHEDULE 0xc1 #define PPC_KEY_ADDRESS 0xc2 #define PPC_KEY_MAGICN 0xc3 #define PPC_KEY_LAUNCHER 0xc4 #define PPC_KEY_RECORD 0xc5
#define PPC_KEY_CALL 0x72 #define PPC_KEY_HANGUP 0x73 #define PPC_KEY_VOLUME_UP 0x74 #define PPC_KEY_VOLUME_DOWN 0x75 #define PPC_KEY_VOLUME_UP2 0x26 #define PPC_KEY_VOLUME_DOWN2 0x28 #define PPC_KEY_CANCEL 0x08
#define WH_JOURNALRECORD 0 #define WH_JOURNALPLAYBACK 1 #define WH_KEYBOARD_LL 20
//Notification Code LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ) { PKBDLLHOOKSTRUCT pKeyStruct = (PKBDLLHOOKSTRUCT)lParam; LRESULT lResult = 0;
if ((AfxGetMainWnd()->m_hWnd != NULL) && (code == HC_ACTION) && (wParam == WM_KEYDOWN) ) {
switch(pKeyStruct->vkCode ) { case PPC_KEY_APP1: case PPC_KEY_APP2: case PPC_KEY_APP3: case PPC_KEY_APP4: case PPC_KEY_APP5: case PPC_KEY_CALL: case PPC_KEY_HANGUP: case PPC_KEY_CANCEL: lResult = 1; break; } }
if (0 == lResult) lResult = CallNextHookEx(hKeyboardHook, code, wParam, lParam);
// Return true if hook was handled, false to pass it on return lResult; }
void MyCEView::OnInitialUpdate() { CView::OnInitialUpdate();
hKeyboardHook = SetWindowsHookExW( WH_KEYBOARD_LL, (HOOKPROC) KeyboardProc, // address of hook procedure NULL, // handle to application instance 0 ); }
BOOL MyCEView::DestroyWindow() { if (0 != hKeyboardHook) UnhookWindowsHookEx(hKeyboardHook);
return CView::DestroyWindow(); } |