通过任务管理器禁用鼠标

//枚举设备,储存起来
BOOL CMFCtestDlg::GetDeviceList(LPGUID lpGuid)
{
	BOOL bFlag = TRUE;
	
	do 
	{
		HDEVINFO hDevInfo;
		SP_DEVINFO_DATA DeviceInfoData;     
		DWORD i;     
 
		// 得到设备 HDEVINFO ,若是加上了| DIGCF_ALLCLASSES 则表示查询出所有设备的信息,lpGuid这个参数无效。
		hDevInfo = SetupDiGetClassDevs(lpGuid, 0, 0, DIGCF_PRESENT /*| DIGCF_ALLCLASSES*/ );     
		if (hDevInfo == INVALID_HANDLE_VALUE)     
		{
			printf ("SetUpDi ERR!");
			bFlag = FALSE;
			break;
		}
		cout<<"hDevInfo:"<<hDevInfo<<endl;
		
		//DeviceInfo theItem;
 
		// 循环列举,枚举所得的信息
		DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);     
		for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)     
		{     
			TCHAR szClassBuf[MAX_PATH] = { 0 };
			TCHAR szDescBuf[MAX_PATH] = { 0 };
			TCHAR szDriver[MAX_PATH] = { 0 };
			TCHAR szFriName[MAX_PATH] = { 0 };
 
			//获取类名,获取指定的即插即用的设备属性 ,SPDRP_CLASS是属性标识,用以指示szClassBuf输出的是哪个属性值,在此是要求输出ClassGUID
			if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS, NULL, (PBYTE)szClassBuf, MAX_PATH - 1, NULL))         
			{
				///*continue*/; 
				printf ("Get szClassBuf Name ERR!\n");
			}  
 
			theItem.szDeviceClass = szClassBuf;
			cout<<"theItem.szDeviceClass = "<<theItem.szDeviceClass<<endl;
 
			//获取设备描述信息
			if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szDescBuf, MAX_PATH - 1, NULL))         
			{
				///*continue*/;
				printf ("Get szDescBuf Name ERR!\n");
			}
 
			theItem.szDeviceDesc = szDescBuf;
			cout<<"theItem.szDeviceDesc = "<<theItem.szDeviceDesc<<endl;
 
			//获取设备驱动名
			if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER, NULL, (PBYTE)szDriver, MAX_PATH - 1, NULL))         
			{
				///*continue*/;
				printf ("Get szDriver Name ERR!\n");
			}
 
			theItem.szDriverName = szDriver;
			cout<<"theItem.szDriverName = "<<theItem.szDriverName<<endl;
 
			//获取设备友好名
			if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CONFIGFLAGS, NULL, (PBYTE)szFriName, MAX_PATH - 1, NULL))         
			{
				///*continue*/;
				printf ("Get Friend Name ERR!\n");
			}
			//ERROR_INSUFFICIENT_BUFFER;
 
			theItem.szDeviceName = szFriName;
			cout<<"ConfigFlags = "<<theItem.szDeviceName<<endl;
 
			theItem.dwDevIns = DeviceInfoData.DevInst;
			theItem.Guid = DeviceInfoData.ClassGuid;
 
			//theDeviceList.push_back (theItem);
		}     
 
		//  释放     
		SetupDiDestroyDeviceInfoList(hDevInfo); 
		
		//随机快速排序
		//sort(theDeviceList.begin (),theDeviceList.end (), less<DeviceInfo>());
 
	} while (FALSE);
	 
	return bFlag;
}
//设置设备状态(启用/停用),1为启用,0为停用
BOOL CMFCtestDlg::SetDeviceStatus(DeviceInfo &theDevice,BOOL bStatusFlag)
{
	BOOL bFlag = TRUE;
	do 
	{
		SP_DEVINFO_DATA DeviceInfoData;
		DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); 
		HDEVINFO hDevInfo;
		// 得到设备 HDEVINFO      
		hDevInfo = SetupDiGetClassDevs(&theDevice.Guid, 0, 0, DIGCF_PRESENT /*| DIGCF_ALLCLASSES */);     
		if (hDevInfo == INVALID_HANDLE_VALUE)    
		{
			printf ("SetUpDi ERR!\n");
			bFlag = FALSE;
			break;
		}
 
		//判断是否有这个设备
		//bFlag = FALSE;
		
		int index = 0;
		//枚举所得的信息
		while (SetupDiEnumDeviceInfo(hDevInfo, index ++, &DeviceInfoData))
		{
			if (DeviceInfoData.DevInst == theDevice.dwDevIns)
			{
				bFlag = TRUE;
				break;
			}
		}
		if (!bFlag)
		{
			printf ("Dev Not Found!\n");
		}
		else
		{
			//初始化属性
			SP_PROPCHANGE_PARAMS propChange;
			propChange.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
			propChange.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
			propChange.Scope = DICS_FLAG_GLOBAL;  //使修改的属性保存在所有的硬件属性文件
			propChange.StateChange = STATE/*bStatusFlag ? DICS_START: DICS_STOP*/;  //问题1
			propChange.HwProfile = 0;
 
			//为设备信息集或者是一个实际的设备信息单元设置或清除类安装参数,需要传入SP_PROPCHANGE_PARAMS结构指针,这个结构是负责协调DIF_PROPERTYCHANGE (propertychange)安装请求
			if (SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)&propChange, sizeof(propChange)))
			{
				if (!SetupDiChangeState(hDevInfo, &DeviceInfoData))
				{
					/*printf("Change Device ERR!\n");
					bFlag = FALSE;*/
					DWORD dwErrCode = ERROR_NO_CLASSINSTALL_PARAMS;
					dwErrCode= GetLastError();
					printf("SetupDiChangeState. Error Code:%x\n",GetLastError());
					bFlag = FALSE;
				}
			}
			else
			{
				printf("SetupDiSetClassInstallParams ERR!\n");  //?
				bFlag = FALSE;
			}

			//  //改变设备属性
			//if (!SetupDiSetClassInstallParams( hDevInfo,
			//								&DeviceInfoData,
			//								(SP_CLASSINSTALL_HEADER *)&propChange,
			//								sizeof(propChange)))
			//{
			//	OutputDebugString("SetupDiSetClassInstallParams FAILED");
			//	return FALSE;
			//}

		}
 
		//  释放     
		SetupDiDestroyDeviceInfoList(hDevInfo); 
 
 
	} while (FALSE);
 
	return bFlag;
}

其中在OnInitDialog函数中:

LPGUID Class = (LPGUID)malloc(sizeof(LPGUID)); 
//class是USB输入设备的的类GUID
	
	Class->Data1=0x745a17a0;
	Class->Data2=0x74d3;
	Class->Data3=0x11d0;
	Class->Data4[0]=0xb6;
	Class->Data4[1]=0xfe;
	Class->Data4[2]=0x00;
	Class->Data4[3]=0xa0;
	Class->Data4[4]=0xc9;
	Class->Data4[5]=0x0f;
	Class->Data4[6]=0x57;
	Class->Data4[7]=0xda;

	
	LPGUID lpGuid=NULL;

	GetDeviceList(Class);
	SetDeviceStatus(theItem,0);

其中,重要的变量定义如:
DeviceInfo theItem; #define CLOSESTATE DICS_DISABLE #define OPENSTATE DICS_ENABLE #define STATE OPENSTATE
特别说明vs要以管理员身份运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值