在Windows中,设置键盘钩子很多人都做过,但是在windows Mobile系统中并没有直接的函数支持。但是我们可以通过使用undocument api来实现。
一、定义参数
- #defineWH_KEYBOARD_LL20
- #defineHC_ACTION0
- typedefLRESULT(CALLBACK*HOOKPROC)(intcode,WPARAMwParam,LPARAMlParam);
- typedefHHOOK (WINAPI*_SetWindowsHookExW)(int,HOOKPROC,HINSTANCE,DWORD);
- typedefLRESULT (WINAPI*_CallNextHookEx)(HHOOK,int,WPARAM,LPARAM);
- typedefLRESULT (WINAPI*_UnhookWindowsHookEx)(HHOOK);
- typedefstruct
- {
- DWORDvkCode;
- DWORDscanCode;
- DWORDflags;
- DWORDtime;
- ULONG_PTRdwExtraInfo;
- }KBDLLHOOKSTRUCT,*PKBDLLHOOKSTRUCT;
- static_SetWindowsHookExWSetWindowsHookEx;
- static_UnhookWindowsHookExUnhookWindowsHookEx;
- static_CallNextHookExCallNextHookEx;
二、实现代码
LLKeyboardHookCallbackFunction就是回调函数
- BOOLActivateKBHook(HINSTANCEhInstance,
- HOOKPROCLLKeyboardHookCallbackFunction)
- {
- SetWindowsHookEx=NULL;
- CallNextHookEx=NULL;
- UnhookWindowsHookEx=NULL;
- g_hHookApiDLL=LoadLibrary(_T("coredll.dll"));
- if(g_hHookApiDLL==NULL)
- {
- returnFALSE;
- }
- else
- {
- SetWindowsHookEx=(_SetWindowsHookExW)GetProcAddress(
- g_hHookApiDLL,_T("SetWindowsHookExW"));
- if(SetWindowsHookEx==NULL)
- {
- returnFALSE;
- }
- else
- {
- g_hInstalledLLKBDhook=SetWindowsHookEx(WH_KEYBOARD_LL,
- LLKeyboardHookCallbackFunction,hInstance,0);
- if(g_hInstalledLLKBDhook==NULL)
- {
- returnFALSE;
- }
- }
- CallNextHookEx=(_CallNextHookEx)GetProcAddress(g_hHookApiDLL,
- _T("CallNextHookEx"));
- if(CallNextHookEx==NULL)
- {
- returnFALSE;
- }
- UnhookWindowsHookEx=(_UnhookWindowsHookEx)GetProcAddress(g_hHookApiDLL,
- _T("UnhookWindowsHookEx"));
- if(UnhookWindowsHookEx==NULL)
- {
- returnFALSE;
- }
- }
- returnTRUE;
- }
- BOOLDeactivateKBHook()
- {
- if(g_hInstalledLLKBDhook!=NULL)
- {
- UnhookWindowsHookEx(g_hInstalledLLKBDhook);
- g_hInstalledLLKBDhook=NULL;
- }
- if(g_hHookApiDLL!=NULL)
- {
- FreeLibrary(g_hHookApiDLL);
- g_hHookApiDLL=NULL;
- }
- returnTRUE;
- }
三、消息回调函数
一般的回调函数是这么写的,BlockKeyList是需要屏蔽的按键列表
- intCLoginDlg::BlockKeyList[]={VK_TBACK,VK_TTALK,VK_TEND,VK_THOME};
- LRESULTCALLBACKCLoginDlg::LLKeyboardHookCallbackFunction(intnCode,
- WPARAMwParam,LPARAMlParam)
- {
- if(nCode>=HC_ACTION)
- {
- if(wParam==WM_KEYDOWN||wParam==WM_KEYUP
- ||wParam==WM_LBUTTONDOWN)
- {
- intcountKeyList=ARRAY_SIZEOF(BlockKeyList);
- for(inti=0;i<countKeyList;i++)
- {
- if((((KBDLLHOOKSTRUCT*)lParam)->vkCode)==BlockKeyList[i])
- {
- returnTRUE;
- }
- }
- }
- }
- returnCallNextHookEx(g_hInstalledLLKBDhook,nCode,wParam,lParam);
- }
Windows Mobile下不使用DLL也可以实现全局键盘钩子)
如果你只是要屏蔽所有按键的话可以简单的使用EnableHardwareKeyboard函数来实现。
分享到:
相关推荐
windows mobile系统钩子示范程序,使用C++编写,环境为Visual Studio 2005,希望对大家有用!
WindowsMobile5 源码WindowsMobile5 源码WindowsMobile5 源码WindowsMobile5 源码
Windows Mobile开发实验,wince操作系统定制。
如何搭建windows mobile应用开发的环境
众所周知,在windows7操作系统中已经不需要安装active sync ...清您下载windows mobile center for windows7(vista也是如此)软件,然后将手机与电脑连接即可.亲自操作,该方法适合于任何版本的windows mobile 手机系统.
Windows Mobile开发Windows Mobile开发Windows Mobile开发Windows Mobile开发
Windows Mobile for HP iPAQ 114
Windows Mobile 经典源码 学习Windows Mobile 的不二选择
windows mobile 平台下的My mobile软件。
QR条形码的开发程序,能够在windows mobile 6中实现QR条形码的开发程序,能够在windows mobile 6中实现,eMbedded Visual C++和VS两种源代码
Windows mobile 6.5常用软件
windows mobile 6.0 基于WebService方式与PC Server通讯的demo
Windows Mobile应用程序开发介绍 .Windows Mobile平台 .Windows Mobile开发环境搭建 .Windows Mobile开发技术和资源 .Demo
windows mobile直连版
WINDOWS MOBILE滑屏解锁
windows mobile驱动开发
ppc windows mobile rom
windows mobile 同步程序,本程序为windows xp 专用!
Windows mobile应用开发流程
Windows Mobile UI 设计 (Smartphone 和 Pocket PC .Net版)