CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

vc中用什么东东可以控制Usb接口啊?多谢

楼主elfinyoung(曹凡)2005-05-09 23:37:28 在 VC/MFC / 基础类 提问

偶一菜菜鸟,毕设老师催了好久了,我也没搞明白用什么来做usb接口的禁用,启用等  
  哪位不吝赐教一下啊  
  :) 问题点数:20、回复次数:6Top

1 楼qrlvls( 空 气 )回复于 2005-05-09 23:46:25 得分 10

通过编写过滤驱动来置功能驱动的有效状态Top

2 楼qrlvls( 空 气 )回复于 2005-05-09 23:46:37 得分 0

可以查找有关总线过滤驱动的资料Top

3 楼krh2001(边城浪子)回复于 2005-05-10 00:19:47 得分 10

//   必要的头文件和要链接的LIB文件  
  #include   <setupapi.h>  
  #include   <shlwapi.h>  
  #pragma   comment(lib,   "setupapi.lib")  
  #pragma   comment(lib,   "shlwapi.lib")    
  //   device   information   set(我把它译为设备信息集)  
  HDEVINFO   hDevInfo   =   NULL;  
   
  //   出错信息  
  void   FormatMSG(DWORD   dwError,   LPTSTR   *   lpszMsg)  
  {    
   BOOL   bOk   =   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM   |   FORMAT_MESSAGE_ALLOCATE_BUFFER,   NULL,   dwError,  
      MAKELANGID(LANG_CHINESE,   SUBLANG_CHINESE_SIMPLIFIED),   (LPTSTR)lpszMsg,   0,   NULL);  
   
   if   (!bOk)  
   {  
    HMODULE   hDll   =   LoadLibraryEx(_T("netmsg.dll"),  
       NULL,  
       DONT_RESOLVE_DLL_REFERENCES);  
    if   (NULL   !=   hDll)  
    {  
      FormatMessage(FORMAT_MESSAGE_FROM_HMODULE   |    
          FORMAT_MESSAGE_FROM_SYSTEM,  
          hDll,  
          dwError,  
          MAKELANGID(LANG_CHINESE,   SUBLANG_CHINESE_SIMPLIFIED),  
          (LPTSTR)lpszMsg,0,   NULL);  
      FreeLibrary(hDll);  
    }  
   }  
  }  
   
  BOOL   ChangeStatus(DWORD   NewStatus,   DWORD   SelectedItem,   HDEVINFO   hDevInfo)  
  {  
   LPTSTR   lpszMsg   =   NULL;  
   HCURSOR   hCursor   =   NULL;  
   try  
   {  
    SP_PROPCHANGE_PARAMS   PropChangeParams   =   {sizeof(SP_CLASSINSTALL_HEADER)};  
    SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};    
   
    hCursor   =   SetCursor(LoadCursor(NULL,   IDC_WAIT));  
   
    //   Get   a   handle   to   the   Selected   Item.  
    if   (!SetupDiEnumDeviceInfo(hDevInfo,   SelectedItem,   &DeviceInfoData))  
    {  
     FormatMSG(GetLastError(),   &lpszMsg);  
     throw   lpszMsg;  
    }  
   
    //   Set   the   PropChangeParams   structure.  
    PropChangeParams.ClassInstallHeader.InstallFunction   =   DIF_PROPERTYCHANGE;  
    PropChangeParams.Scope   =   DICS_FLAG_GLOBAL;  
    PropChangeParams.StateChange   =   NewStatus;  
   
    if   (!SetupDiSetClassInstallParams(hDevInfo,   &DeviceInfoData,   (SP_CLASSINSTALL_HEADER   *)&PropChangeParams,  
  sizeof(PropChangeParams)))  
    {  
     FormatMSG(GetLastError(),   &lpszMsg);  
     throw   lpszMsg;  
    }  
   
    //   Call   the   ClassInstaller   and   perform   the   change.  
    if   (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))  
    {  
     FormatMSG(GetLastError(),   &lpszMsg);  
     throw   lpszMsg;  
    }  
   
    SetCursor(hCursor);    
    return   TRUE;  
   }  
   catch   (TCHAR   *   pszError)  
   {  
    SetCursor(hCursor);  
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);  
    if   (NULL   !=   lpszMsg)  
    {  
     LocalFree((HLOCAL)lpszMsg);  
    }    
    return   FALSE;  
   }    
  }  
   
  //   这些设备的启用和禁用主要有此函数实现  
  //   参数说明,nStatus   可取3个值,-1   :啥也不做  
  //   0   禁用设备,1启用设备。  
  //   nIndex用于控制是对光驱,软驱还是对USB启用或禁用  
  //   也是可取3个值,0   代表软驱,1   代表光驱  
  //   2   代表USB  
  //   譬如要对光驱实现禁用,可以这样调用此函数  
  //   ControlDisk(0,   1);  
  BOOL   ControlDisk(int   nStatus,   int   nIndex)  
  {  
   if   (-1   ==   nStatus)  
   {   
    return   FALSE;  
   }    
   
   LPTSTR   lpszMsg   =   NULL;  
   try  
   {  
    TCHAR   *   GUIDString   =   NULL;  
    GUID   guid;  
    ZeroMemory(&guid,   sizeof(GUID));  
    switch(nIndex)  
    {  
     case   0:   //   0   代表软驱  
      GUIDString   =   _T("4D36E980-E325-11CE-BFC1-08002BE10318");  
      UuidFromString((unsigned   char   *)GUIDString,   &guid);  
      break;    
     case   1:   //   1   代表光驱    
      GUIDString   =   _T("4D36E965-E325-11CE-BFC1-08002BE10318");  
      UuidFromString((unsigned   char   *)GUIDString,   &guid);  
      break;  
     case   2:   //   2   代表USB  
      GUIDString   =   _T("36FC9E60-C465-11CF-8056-444553540000");  
      UuidFromString((unsigned   char   *)GUIDString,   &guid);  
      break;  
    }  
   
    hDevInfo   =   SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);  
    if   (INVALID_HANDLE_VALUE   ==   hDevInfo)  
    {  
     FormatMSG(GetLastError(),   &lpszMsg);  
     throw   lpszMsg;  
    }  
   
    DWORD   i;  
    SP_DEVINFO_DATA   DeviceInfoData;  
    ZeroMemory(&DeviceInfoData,   sizeof(SP_DEVINFO_DATA));  
    DeviceInfoData.cbSize   =   sizeof(SP_DEVINFO_DATA);  
   
    for   (i   =   0;   SetupDiEnumDeviceInfo(hDevInfo,   i,   &DeviceInfoData);   ++i)  
    {  
     if   (1   ==   nStatus)  
     {  
      StateChange(DICS_ENABLE,   i,   hDevInfo);  
     }  
     else   if   (0   ==   nStatus)  
     {  
      StateChange(DICS_DISABLE,   i,   hDevInfo);  
     }    
    }  
   
    //   释放   device   information   set  
    return   SetupDiDestroyDeviceInfoList(hDevInfo);  
   }  
   catch   (TCHAR   *   pszError)  
   {  
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);  
    if   (NULL   !=   lpszMsg)  
    {  
     LocalFree((HLOCAL)lpszMsg);  
    }    
    return   FALSE;  
   }  
   return   FALSE;  
  }Top

4 楼KevinWon(Kevin)回复于 2005-05-10 01:45:19 得分 0

学习 高手们继续Top

5 楼elfinyoung(曹凡)回复于 2005-05-10 11:59:18 得分 0

浪子哥哥,你贴得这个程序我看过,可是看不懂啊,是MFC吗?  
  我想自己从入门的地方学一点Top

6 楼lyrzhlgq(笑天,笑地)回复于 2005-07-26 10:54:46 得分 0

mkTop

相关问题

  • vc问题,多谢回答。
  • VC如何实现资源管理器?多谢多谢!!!!!!!
  • 关于windows、VC中的ntohl/htonl,多谢!
  • vc MFC中有FTP类吗,怎么用,最后给个例子?多谢多谢多多谢
  • 在发一次:VC打印“死角”问题:请进来看看,多谢多谢!
  • 我想用 VC 操作串口 帮帮我, 多谢
  • VC中如何获得硬盘ID ?多谢了
  • VC中如何获得硬盘ID ?多谢了
  • 各位大虾,请教一下,vc++中dll的问题,多谢!!!
  • 请教如何用VC作直线控件。多谢

关键词

  • usb
  • null
  • guidstring
  • uuidfromstring
  • lpszmsg
  • hdevinfo
  • 光驱
  • hdll
  • dwerror
  • 禁用

得分解答快速导航

  • 帖主:elfinyoung
  • qrlvls
  • krh2001

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo