【CBM666 请教屏蔽鼠标】
我现在是用VB模拟键盘与鼠标,第一阶段已搞定,但自动上锁机箱总感不便.
在软件运行其间,setcursorpos经常会用到自动定位自动点击, 因此我必须防止他人乱动鼠标, 乱动肯定会点错地方的,
曾见过有真假鼠标, 请教各位思路......谢谢。
[解决办法]
你的系统是触摸屏的?还是带了硬件鼠标的啊?
如果是触摸屏的,那么Hook掉触摸消息?
[解决办法]
//********************************************************************************//** 函 数 名 : SetDeviceState//** 输 入 : DeviceName - 设备名称//** : bState - 设备开关状态//** 返 回 : BOOL - 成功返回 TRUE, 失败返回 FALSE//** 功能描述 : 设置设备的启用或禁用状态//********************************************************************************BOOL _stdcall SetDeviceState(char * DeviceName, BOOL bState){ //------------------------------------------------ // 过程内局部变量定义 //------------------------------------------------ HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; VBString sDeviceDescription; VBString sDeviceName; BOOL rd; DWORD dwRegDataType; DWORD dwBufferSize; BYTE *bDevInfo; BOOL IsFind; SP_PROPCHANGE_PARAMS PropChangeParams; //初始化基本参数 sDeviceName = DeviceName; sDeviceName.set_UCase(); //------------------------------------------------ //先通过枚举所有设备找出指定设备名称的相关GUID信息 //------------------------------------------------ //程序开始设下错误陷阱防止意外崩溃 hDevInfo = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_PRESENT | DIGCF_ALLCLASSES); if(hDevInfo == INVALID_HANDLE_VALUE){ return FALSE; } DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); i = 0; IsFind = FALSE; //开始循环枚举设备信息 while(SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData)!=FALSE){ //------ 取得设备名称 ------ rd = SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &dwRegDataType, NULL, NULL, &dwBufferSize); if(rd!=TRUE){ bDevInfo = (BYTE *)GlobalAlloc(GMEM_ZEROINIT, dwBufferSize * 2); rd = SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &dwRegDataType, bDevInfo, dwBufferSize, NULL); sDeviceDescription.set_Bytes(bDevInfo); sDeviceDescription.set_UCase(); GlobalFree((HGLOBAL)bDevInfo); if(sDeviceDescription == *sDeviceName){ IsFind = TRUE; break; } } i++; } if(IsFind!=TRUE){ //没有找到指定设备的相关信息 SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; } //------------------------------------------------ // 开始设置设备启用状态 //------------------------------------------------ PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; PropChangeParams.Scope = DICS_FLAG_GLOBAL; PropChangeParams.StateChange = (bState!=FALSE?DICS_ENABLE:DICS_DISABLE); PropChangeParams.HwProfile = 0; rd = SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS)); if(rd==FALSE){ SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; } PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC; PropChangeParams.StateChange = (bState!=FALSE?DICS_ENABLE:DICS_DISABLE); PropChangeParams.HwProfile = 0; rd = SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS)); if(rd==FALSE){ SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; } rd = SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData); if(rd==FALSE){ SetupDiDestroyDeviceInfoList(hDevInfo); return FALSE; } SetupDiDestroyDeviceInfoList(hDevInfo); return TRUE;}