阅读:2929回复:8
读取PS/2键盘/鼠标的输入的问题
我只是想得到键盘设备的路径,然后打开设备读取键盘的所有输入,但是总是在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); |
|
沙发#
发布于:2008-07-14 09:28
怎么就没有人做过吗??
|
|
板凳#
发布于:2008-07-18 16:47
这个好像要写驱动才可以的
|
|
|
地板#
发布于:2008-07-21 11:42
PS/2还是写驱动或者使用Hook吧
不建议你用CreateFile打开然后直接读 |
|
|
地下室#
发布于:2008-08-19 14:47
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2008-08-19 15:32
引用第4楼eaatcc于2008-08-19 14:47发表的 : 请教,PS/2的鼠标在系统启动时是否是自动打开的,即系统会调用驱动的CREATEFIEL例程打开一个句柄,如果是,那系统何时会关闭该句柄,应该怎样促使系统关闭该句柄? |
|
6楼#
发布于:2008-09-29 22:03
谁有ps/2鼠标的过滤驱动啊,小弟求购一个,QQ:1020725464
|
|
7楼#
发布于:2010-09-10 18:06
看到就回一下了,,,我也是初學的
在mouclass.sys 會擋下來. 可參考wdk 裡的mouclass sample NTSTATUS MouseClassCreate ( // // We do not allow user mode opens for read. This includes services (who // have the TCB privilege). // if (Irp->RequestorMode == UserMode && (irpSp->Parameters.Create.SecurityContext->DesiredAccess & FILE_READ_DATA)) { status = STATUS_ACCESS_DENIED; goto MouseClassCreateEnd; |
|
8楼#
发布于:2010-09-16 10:19
用户被禁言,该主题自动屏蔽! |
|