学习钩子的应用
来源:互联网 发布:怎么还原数据库 编辑:程序博客网 时间:2024/05/01 04:21
在ATL组件编程中,弹出的非模态对话框无法响应某些键盘事件,一种解决办法是使用钩子:
CSDN的帖子:100分求救:Atl组件中键盘消息的响应问题
http://community.csdn.net/Expert/topic/5252/5252728.xml?temp=.8889887
改造后的实际应用:
// 存放非模态的对话框句柄
std::set<HWND> m_setHwnd;
static HHOOK hHook = NULL;
LRESULT FAR PASCAL GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
LPMSG lpMsg = (LPMSG) lParam;
if ( nCode >= 0 && PM_REMOVE == wParam )
{
// Don't translate non-input events.
if ( (lpMsg->message != WM_CHAR && lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) )
{
std::set<HWND>::iterator iter = m_setHwnd.begin();
for (; iter != m_setHwnd.end(); iter++) {
HWND hWnd = *iter;
if ( IsDialogMessage(hWnd, lpMsg) )
{
// The value returned from this hookproc is ignored,
// and it cannot be used to tell Windows the message has been handled.
// To avoid further processing, convert the message to WM_NULL
// before returning.
lpMsg->message = WM_NULL;
lpMsg->lParam = 0;
lpMsg->wParam = 0;
}
}
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
// 钩子的植入
BOOL CXXXApp::InitInstance()
{
AfxEnableControlContainer();
hHook = SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc,
NULL, GetCurrentThreadId() );
return CWinApp::InitInstance();
}
//钩子的卸载
int CXXXApp::ExitInstance()
{
UnhookWindowsHookEx( hHook );
return CWinApp::ExitInstance();
}
- 学习钩子的应用
- 系统钩子的应用
- windows 钩子的应用
- 钩子的简单应用
- 钩子的应用
- php钩子的应用
- 钩子的学习
- 钩子函数的学习
- Java关闭钩子的应用
- [技巧] 钩子函数的学习
- 模板钩子方法的学习
- 钩子学习:一个键盘线程钩子的实现
- 钩子的应用: 程序运行监视
- 钩子的应用: 程序运行监视
- Windows的钩子实现与应用
- 模板方法模式--钩子的应用
- 钩子学习
- MFC钩子简单应用
- JPEG图片格式
- 如何使用C#读取文本文件
- URI and URL
- 用Box布局swing界面
- Ruby on Rails研究之一:安装
- 学习钩子的应用
- 测试3
- 汇编 接口简单异步查询方式与cpu通信
- 用户如何有效地利用数据字典
- 不知所云
- 使用业务对象
- 转 用NistNet模仿网络环境
- javascript的event事件与获取鼠标光标
- 测试4