| 
			 
					阅读:3096回复: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				
			用户被禁言,该主题自动屏蔽! 				 | 
	|