请教OnDeviceChange的问题

moren123 2009-02-05 10:29:23
我的OnDeviceChange老是收到7,搜索了一下发现是没有注册设备通知。
看了下面的帖子:
http://topic.csdn.net/t/20061013/11/5079590.html
需要注册
BOOL CRSDlg::DoRegisterDeviceInterface(GUID InterfaceClassGuid, HDEVNOTIFY *hDevNotify)
{
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
DWORD Err;

ZeroMemory( ¬ificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = 32;
// sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = InterfaceClassGuid;

*hDevNotify = RegisterDeviceNotification(GetSafeHwnd(), ¬ificationFilter,
DEVICE_NOTIFY_WINDOW_HANDLE );
if(!*hDevNotify)
{
Err = GetLastError();
CString str;
str.Format(_T("RegisterDeviceNotification failed: %lx."),Err);
DT((LPCSTR)str);
return FALSE;
}
DT("RegisterDeviceNotification Successed :)");
//UnregisterDeviceNotification(*hDevNotify);
return TRUE;
}
我想问下这个函数是直接象普通函数那样添加的吗? 还是要怎么样添加?什么时候才会调用到这个函数?
另外我加了这段代码之后,出现下面的错误:
error C2065: 'RegisterDeviceNotification' : undeclared identifier
error C2065: 'DEVICE_NOTIFY_WINDOW_HANDLE' : undeclared identifier
error C2440: '=' : cannot convert from 'int' to 'void *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
error C2065: 'DT' : undeclared identifier
有没有人知道怎么解决?
谢谢。
...全文
1936 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggvvcc 2011-04-22
  • 打赏
  • 举报
回复
正需要。。。
tangsmail 2010-10-21
  • 打赏
  • 举报
回复
学习下,谢谢
djsme 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 moren123 的回复:]
把User32.lib加入LINK中,同时把Winuser.h,windows.h都加上了,还是有这个错误,我的系统是在XP上,不知道有没有影响。
[/Quote]你遇到的问题我也遇到过,解决了,还写了文档,看这:http://user.qzone.qq.com/343614534/blog/1249583059
banqhu 2009-05-12
  • 打赏
  • 举报
回复
good
moren123 2009-02-06
  • 打赏
  • 举报
回复
有没有人知道啊? 顶起。
moren123 2009-02-06
  • 打赏
  • 举报
回复
谢谢,正是映射原因,揭贴了。
Allen_zhang 2009-02-06
  • 打赏
  • 举报
回复
添加了消息映射了吗?
moren123 2009-02-06
  • 打赏
  • 举报
回复
谢谢,可以编译成功了,但是这次插拔USB手机线的时候,都没有进入Ondevicechange里面的?
还可能是什么问题?
Allen_zhang 2009-02-06
  • 打赏
  • 举报
回复
给你一段代码参考一下,你需要注册那个就注册相应的就行了

static const GUID GUID_DEVINTERFACE_LIST[] =
{
// GUID_DEVINTERFACE_USB_DEVICE
{ 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },

// GUID_DEVINTERFACE_DISK
{ 0x53f56307, 0xb6bf, 0x11d0, { 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },

// GUID_DEVINTERFACE_HID,
{ 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },

// GUID_NDIS_LAN_CLASS
{ 0xad498944, 0x762f, 0x11d0, { 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } }

};

//注册插拔事件
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( ¬ificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
for(int i=0; i<sizeof(GUID_DEVINTERFACE_LIST)/sizeof(GUID); i++)
{
NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), ¬ificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if( !hDevNotify )
{
return FALSE;
}
}
moren123 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Allen_zhang 的回复:]
引用 11 楼 moren123 的回复:
发现这个问题解决了,原因是因为我没有把PSDK的include上移到最上面。
但还有一个问题:
DoRegisterDeviceInterface(GUID  InterfaceClassGuid,  HDEVNOTIFY  *hDevNotify)
这个要在哪里调用的?


我一般是在初始化这个窗口的时候调用

因为还需要用窗口接收WM_DEVICECHANGE消息的
[/Quote]
不好意思,可能我问的不清楚,呵呵 我想问是这两个参数分别是多少? 处理USB的,呵呵。
Allen_zhang 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 moren123 的回复:]
发现这个问题解决了,原因是因为我没有把PSDK的include上移到最上面。
但还有一个问题:
DoRegisterDeviceInterface(GUID InterfaceClassGuid, HDEVNOTIFY *hDevNotify)
这个要在哪里调用的?
[/Quote]

我一般是在初始化这个窗口的时候调用

因为还需要用窗口接收WM_DEVICECHANGE消息的
Allen_zhang 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 moren123 的回复:]
发现这个问题解决了,原因是因为我没有把PSDK的include上移到最上面。
但还有一个问题:
DoRegisterDeviceInterface(GUID InterfaceClassGuid, HDEVNOTIFY *hDevNotify)
这个要在哪里调用的?
[/Quote]

我一般是在初始化这个窗口的时候调用
xjchilli 2009-02-06
  • 打赏
  • 举报
回复
DoRegisterDeviceInterface在你程序使用这个设备前调用。
xjchilli 2009-02-06
  • 打赏
  • 举报
回复
装一下SDK试试看
moren123 2009-02-06
  • 打赏
  • 举报
回复
发现这个问题解决了,原因是因为我没有把PSDK的include上移到最上面。
但还有一个问题:
DoRegisterDeviceInterface(GUID InterfaceClassGuid, HDEVNOTIFY *hDevNotify)
这个要在哪里调用的?
moren123 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Allen_zhang 的回复:]
这个函数需要有psdk的哦,你有没有装psdk呢?
[/Quote]
Allen_zhang手头上有没有ondevicechange例子? 能不能发给我? blood107@163.com,谢谢.
moren123 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Allen_zhang 的回复:]
这个函数需要有psdk的哦,你有没有装psdk呢?
[/Quote]
platform sdk装了,但是在VC中显示有这个函数的啊。
Allen_zhang 2009-02-06
  • 打赏
  • 举报
回复
这个函数需要有psdk的哦,你有没有装psdk呢?
moren123 2009-02-05
  • 打赏
  • 举报
回复
怎么没人回的? 顶一个。
moren123 2009-02-05
  • 打赏
  • 举报
回复
把User32.lib加入LINK中,同时把Winuser.h,windows.h都加上了,还是有这个错误,我的系统是在XP上,不知道有没有影响。
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧