HOOK 钩子拦截WM_DEVICECHANGE消息
来源:互联网 发布:红色经典知多少手抄报 编辑:程序博客网 时间:2024/06/10 21:37
钩子的类型总共15种,每种钩子处理不同的消息(这个资料很多,自己看下)。
钩子用SetWindowsHookEx安装,放在DDL中,有全局钩子的,比如键盘,鼠标等,也可以是线程的,指定窗口的(不是很准确,但实用)。是全局还是指定,主要是看SetWindowsHookEx中的参数设置:
全局时:第三个参数为DLL的hInstance,第四个参数为NULL。
线程时:第三个参数NULL。
指定时:第三个参数为DLL的hInstance,第四个参数为为dwThreadId是指定窗口线程ID,这样你就能获得指定窗口的消息了。
来实用的,关于如何截获WM_DEVICECHANGE消息,可以用WH_CALLWNDPROC类型的钩子,在回调函数LauncherHook中判断
CWPSTRUCT *msg = (CWPSTRUCT *)lParam;
if (msg->message == WM_DEVICECHANGE)
{
if(msg->wParam == DBT_DEVICEARRIVAL)
{
// TRACE("j");
//你要做的事情
}
}
可能有人说,哇,收到DBT_DEVICEARRIVAL消息会上百次啊,呵呵,当然啦,WH_CALLWNDPROC类型的钩子就是向每个窗口都发这个消息一次,你的全局钩子自然接收好多好多的噪音,呵呵。
我们要做的就是指定窗口接收,dwThreadId是指定窗口线程ID,
DWORD dwThreadID = GetWindowThreadProcessId(Yourhwnd, NULL);
Yourhwnd是指定窗口的句柄,我做得是SDK应用程序,没有窗口,于是我获取了Program Manager的句柄(Windows自带的),获取方法:
HWND Yourhwnd= ::FindWindow("Progman","Program Manager");
你可以换成你的指定的窗口句柄,这样再安装钩子,DBT_DEVICEARRIVAL只会接收一次,在XP测试没有问题。
- HOOK 钩子拦截WM_DEVICECHANGE消息
- HOOK 钩子拦截WM_DEVICECHANGE消息
- 使用HOOK 拦截 WM_DEVICECHANGE消息
- Hook :VC++消息钩子编程
- HOOK拦截消息代码
- 使用hook 拦截消息
- 消息钩子的反拦截
- C#钩子内部消息拦截
- 实现拦截API的钩子(Hook)
- 全局钩子(hook鼠标键盘消息)
- C++ Windows Hook 消息钩子 详解
- OCX中使用钩子HOOK消息
- 深入了解WM_DEVICECHANGE消息
- C#钩子本线程内消息拦截
- C#钩子本线程内消息拦截
- C#钩子本线程内消息拦截
- C#钩子本线程内消息拦截
- C#钩子本线程内消息拦截
- 关于我的发型
- DataTable 修改数据
- 发布一个 JavaScript 右击菜单 支持 ie678,Firefox,Safari
- JavaScript 获取客户端计算机硬件及系统信息
- Flex Builder3 plugin
- HOOK 钩子拦截WM_DEVICECHANGE消息
- winCE下使用一组buffer实现音频回环
- 禁止网页复制和右键菜单(支持IE FF)
- GCF CommConnection Connector实现代码分析
- SQL SERVER 2005 安装错误解决了~
- 适配器
- 确保PHP应用程序的安全
- November 15th Sunday
- 软件包 java.io 的分层结构(http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/io/package-tree.html)