HOOK 钩子拦截WM_DEVICECHANGE消息
2009-11-13 18:04
337 查看
钩子的类型总共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测试没有问题。
钩子用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消息
- 实现拦截API的钩子(Hook)
- 实现拦截API的钩子(Hook)
- 实现拦截API的钩子(Hook)
- 使用HOOK 拦截 WM_DEVICECHANGE消息
- 用键盘全局钩子[Hook]监视多进程键盘操作
- HOOK钩子
- HOOK钩子机制学习笔记(2) - 钩子类型MSDN翻译整理
- wince中的hook(钩子)用法
- C#钩子本线程内消息拦截
- git码云配置web hook钩子实现自动部署,git权限等问题,LAMP
- Runtime.addShutdownHook添加钩子
- Hook钩子C#实例
- [转载]Windows HOOK(钩子)机制
- Android插件化系列第(一)篇---Hook技术之Activity的启动过程的拦截
- 读书笔记_windows下的混合钩子(HOOK)_part 4_使用MDL修改内存保护机制
- hook键盘驱动中的分发函数实现键盘输入数据的拦截
- 钩子(hook)编程
- 一种绕过全局钩子安装拦截的思路
- C#中的Hook,即钩子,引用微软的文章,很有用的