cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2333|回复: 11

请教版主及各位大虾----如何用CVI编程实现关断U盘

[复制链接]
发表于 2005-9-3 20:23:02 | 显示全部楼层 |阅读模式
<>是这样的,我想编程实现如下功能:</P>
<>1、程序可以检测到U盘的插入。</P>
<>2、可以将U盘关闭。(在WINDOWS状态栏上不会再出现U盘的符号)</P>
<P>我想,使用VISA应该可以实现,但是我整了很久都没有什么突破,现请教各位有这方面经验的大虾指点。</P>
 楼主| 发表于 2005-9-5 20:07:55 | 显示全部楼层
<>唉!没人回贴.</P><>看样子又要靠自己去摸索了!</P>
发表于 2005-9-10 04:28:36 | 显示全部楼层
发表于 2005-9-11 06:30:09 | 显示全部楼层
<>兄弟我支持你</P><>但我是真的不会哦</P><>呵呵</P>
发表于 2005-9-13 03:44:43 | 显示全部楼层
没有作过。我想应该去查查Windows下关于该设备的管理,然后用CVI通过SDK来解决。祝你成功!
 楼主| 发表于 2005-10-11 03:51:09 | 显示全部楼层
<>历经艰辛万苦.今天终于搞定了.呵呵......</P>
发表于 2005-10-18 21:42:39 | 显示全部楼层
还有点小问题就是,“Undefined symbol '_GUID_CLASS_USB_DEVICE' reference in TestUSB.c”这个错误还是存在,如果这个参数变为NULL,的话没有错误提示,但执行目的达不到,其他的几个错误只需要把setupapi.lib加到工程立即刻,但对于这个错误怎么解决啊?谢谢,盼复!!!
发表于 2005-10-15 01:05:48 | 显示全部楼层
请版主上传程序,让俺们也学学
 楼主| 发表于 2005-10-15 02:24:17 | 显示全部楼层
<>int CVICALLBACK EnjoinUSB (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{
   HDEVINFO hDevInfo;
   
   SP_DEVINFO_DATA DeviceInfoData;
   DWORD i;

switch (event)
  {
  case EVENT_COMMIT:</P><>      //--------------------------------------------------------------------------
      // 获取设备信息
      hDevInfo = SetupDiGetClassDevs((LPGUID)&amp;GUID_CLASS_USB_DEVICE,
          0, // Enumerator
          0,
          DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
      if (hDevInfo == INVALID_HANDLE_VALUE)
      {
          // 查询信息失败
          printf("ERROR - SetupDiGetClassDevs()");
          return 0;
      }
      //--------------------------------------------------------------------------</P><>      // 枚举每个USB设备
      DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
      for (i=0;SetupDiEnumDeviceInfo(hDevInfo, i, &amp;DeviceInfoData);i++)
      {
           LPTSTR buffer = NULL;
           PVOID buffer2 = NULL;
           DWORD buffersize = 0;
           ULONG len;
           CONFIGRET   cr;
           PNP_VETO_TYPE pnpvietotype;
           CHAR vetoname[MAX_PATH];
           ULONG ulStatus;
           ULONG ulProblemNumber;</P><P>           cr = CM_Get_DevNode_Status( &amp;ulStatus,
                                       &amp;ulProblemNumber,
                                       DeviceInfoData.DevInst,
                                       0);
                                       
           if ( CR_SUCCESS == cr )
              {
               printf("OK - CM_Get_DevNode_Status()[%d]\n", cr);
               printf("OK - CM_Get_DevNode_Status() sts [%x]\n", ulStatus);
               printf("OK - CM_Get_DevNode_Status() pro [%x]\n", ulProblemNumber);
              }
     else
       {
               printf("ERROR - CM_Get_DevNode_Status()[%d]\n", cr);
               printf("ERROR - CM_Get_DevNode_Status()[%d]\n", GetLastError());
             }
        
           if ((DN_DISABLEABLE &amp; ulStatus ) != 0 )
               printf("HAS - DN_DISABLEABLE()[%x]\n", DN_DISABLEABLE &amp; ulStatus);
     else
        continue;
           if ((DN_REMOVABLE &amp; ulStatus ) != 0 )
               printf("HAS - DN_REMOVABLE()[%x]\n", DN_REMOVABLE &amp; ulStatus);
     else
              continue;
       </P><P>           len = MAX_PATH;
           // pnpvietotype = PNP_VetoDevice;
           cr = CM_Request_Device_Eject(
                               DeviceInfoData.DevInst,
                               &amp;pnpvietotype,
                               vetoname,
                               len,
                               0
                               );
                              
           if ( CR_SUCCESS == cr )
              {
              printf("OK - CM_Request_Device_Eject()[%d]\n", cr);
               SetupDiDestroyDeviceInfoList(hDevInfo);
               return 1;
              }
           else
             {
              SetupDiDestroyDeviceInfoList(hDevInfo);
              return 0;
              printf("ERROR - CM_Request_Device_Eject()[%d]\n", cr);
              printf("ERROR - CM_Request_Device_Eject()[%d]\n", GetLastError());
             }
          </P><P>      }
      
      
      if ( GetLastError()!=NO_ERROR &amp;&amp;
           GetLastError()!=ERROR_NO_MORE_ITEMS )
      {
          // Insert error handling here.
          return 0;
      }
      
      //  Cleanup
      SetupDiDestroyDeviceInfoList(hDevInfo);
   break;
  }
return 0;
}
</P>
 楼主| 发表于 2005-10-19 04:50:24 | 显示全部楼层
<>增加以下宏定义语句.</P><>#define GUID_CLASS_USB_DEVICE           GUID_DEVINTERFACE_USB_DEVICE</P>
发表于 2005-10-19 06:23:15 | 显示全部楼层
<>我增加了如下的定义(用guidgen.exe生成的):</P><>// {9A8BED8C-2AC0-41d2-AFBB-A21ABE6CC6D3}
DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,0x9a8bed8c, 0x2ac0, 0x41d2, 0xaf, 0xbb, 0xa2, 0x1a, 0xbe, 0x6c, 0xc6, 0xd3);</P><>#define GUID_CLASS_USB_DEVICE           GUID_DEVINTERFACE_USB_DEVICE</P><P>但还是提示</P><P>Undefined symbol '_GUID_DEVINTERFACE_USB_DEVICE' Referenced in "TestUsb.c"</P><P>是不是需要增加什么Lib文件啊?我已经增加了cfgmgr32.lib 和setupapi.lib.</P><P>谢谢!</P>
发表于 2005-10-18 08:31:20 | 显示全部楼层
不好意思,已经解决了,不过还是谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-17 15:57 , Processed in 0.503289 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表