zxw2844
驱动牛犊
驱动牛犊
  • 注册日期2006-06-12
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望66点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:2851回复:8

读取PS/2键盘/鼠标的输入的问题

楼主#
更多 发布于:2008-07-09 15:12
我只是想得到键盘设备的路径,然后打开设备读取键盘的所有输入,但是总是在SetupDiEnumDeviceInterfaces失败,
返回错误259(没有可用的数据了) !!! 请问问题出在那里???

难道是SetupDiClassGuidsFromName得到的GUID是错误的???

// 代码如下:
GUID hidGuid;
HANDLE hidHandle = INVALID_HANDLE_VALUE;

DWORD dwi=sizeof(GUID);  
SetupDiClassGuidsFromName("Keyboard",&hidGuid,dwi,&dwi);//得到设备的GUID

//char szGUID[] = "4D36E96B-E325-11CE-BFC1-08002BE10318"; //从注册表中得到.
//UuidFromString((unsigned char *)szGUID, &hidGuid);

HDEVINFO hDevInfo = SetupDiGetClassDevs( &hidGuid,NULL,NULL,DIGCF_PRESENT ¦ DIGCF_DEVICEINTERFACE );
if( hDevInfo == NULL ) return 0;

SP_DEVICE_INTERFACE_DATA  devInfoData;
::ZeroMemory( &devInfoData,sizeof(devInfoData) );
devInfoData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);

int  nDevCount = 0;
BOOL bResult  = FALSE;

SetLastError(NO_ERROR);
while( GetLastError()!=ERROR_NO_MORE_ITEMS )
{
    bResult = SetupDiEnumDeviceInterfaces( hDevInfo,0,&hidGuid,nDevCount++,&devInfoData );
    DWORD dwError = GetLastError();//总是返回错误259(没有可用的数据了。)
    // 请问为什么啊! 如何解决啊,
    if ( !bResult ) continue;

    ULONG reqLength = 0;
    SetupDiGetInterfaceDeviceDetail( hDevInfo,&devInfoData,NULL,0,&reqLength,NULL );
    PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail =
            (PSP_INTERFACE_DEVICE_DETAIL_DATA) new BYTE[reqLength];
    devDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
    bResult = SetupDiGetInterfaceDeviceDetail  (hDevInfo,&devInfoData,devDetail,reqLength,NULL,NULL );
    if ( !bResult )
    {
        delete devDetail;
devDetail = NULL;
continue;
      }
      TRACE("-- %s\n",devDetail->DevicePath);
      delete devDetail;
      devDetail = NULL;
} // while

SetupDiDestroyDeviceInfoList (hDevInfo);
zxw2844
驱动牛犊
驱动牛犊
  • 注册日期2006-06-12
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望66点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-14 09:28
怎么就没有人做过吗??
游客

返回顶部