有位老哥写了这么一个程序,请各位人士调试一下对不对,帮忙指点,
能不能在c++ 6.0下使用?为什么我的总出错啊? 谢谢谢谢谢谢...急求#include <windows.h>
#include <dbt.h>char FirstDriveFromMask(ULONG unitmask)
{
char i;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
}
return (i + 'A');
}bool Application::winEventFilter(MSG *msg, long *result)
{
bool ret = false;
if (msg->message != WM_DEVICECHANGE)
return ret; PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
static int iCnt = 0;
char szDrivePath[3]; switch (msg->wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
//if (lpdbv->dbcv_flags & DBTF_MEDIA)
{
sprintf(szDrivePath, "%c:\\",
FirstDriveFromMask(lpdbv->dbcv_unitmask));
const wchar_t *path = QString(szDrivePath).toStdWString().c_str();
if (szDrivePath[0] > 'B'
&& GetDriveType(path) == DRIVE_REMOVABLE)
{
iCnt++;
if (iCnt%3 == 0)
{
qDebug() << "Incoming: " << szDrivePath;
ret = true;
}
}
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
break;
default:;
}
return ret;
}
能不能在c++ 6.0下使用?为什么我的总出错啊? 谢谢谢谢谢谢...急求#include <windows.h>
#include <dbt.h>char FirstDriveFromMask(ULONG unitmask)
{
char i;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
}
return (i + 'A');
}bool Application::winEventFilter(MSG *msg, long *result)
{
bool ret = false;
if (msg->message != WM_DEVICECHANGE)
return ret; PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
static int iCnt = 0;
char szDrivePath[3]; switch (msg->wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
//if (lpdbv->dbcv_flags & DBTF_MEDIA)
{
sprintf(szDrivePath, "%c:\\",
FirstDriveFromMask(lpdbv->dbcv_unitmask));
const wchar_t *path = QString(szDrivePath).toStdWString().c_str();
if (szDrivePath[0] > 'B'
&& GetDriveType(path) == DRIVE_REMOVABLE)
{
iCnt++;
if (iCnt%3 == 0)
{
qDebug() << "Incoming: " << szDrivePath;
ret = true;
}
}
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
break;
default:;
}
return ret;
}
解决方案 »
- 有没有人知道在MFC的工程中怎么配置OGRE?
- 给分贴,请xmzzy进来拿分
- 在CView类(CDemoView)中oncreate中创建CMSComm报错,请大虾们帮忙,毕业设计在急
- VC++菜鸟请教:.txt文件中double数据的读、写问题!!!急急急!!!!
- EditBox中对应的CString m_strText+= "\n"+"new info" ,为何"\n"的作用不是换行?如何换行?
- 请问哪里有IOCP效率方面的技术文章
- createbitmapindirect~~~
- 对于一幅位图,其大小是固定的,请问如何自动放大或缩小它,以使其填满一个窗口呀?
- 我在使用Activex控件方法时,用了LPCTSTR作为参数,但是出现以下错误提示:
- 控制窗口的问题(较难)
- 如何得到COM的interface CLSID 和IID
- 急!急!关于应用程序正常初始化(0xc0150002)失败,解决方案
CString CxxxxDlg::FindPath()
{
CString strdir=_T("");
for(char cc='A';cc<='Z';cc++)
{
strdir.Format("%c:",cc);
if(GetDriveType((LPCTSTR)strdir)==DRIVE_REMOVABLE) //判断是不是U盘
return strdir;
}
return strdir=_T(""); //没找到就返回空
}以前写的一个,找到U盘路径,并返回
要想不在MFC下使用,该如何改程序呢?
各位大师请帮忙指点
基于BCB的Windows只会将WM_DEVICECHANGE消息发送给进程的顶层窗口。MSDN上说的很清楚如果不想有窗口,则开个线程循环检测是否有盘符增加。