首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

【CBM666 请问屏蔽鼠标】

2012-01-22 
【CBM666 请教屏蔽鼠标】我现在是用VB模拟键盘与鼠标,第一阶段已搞定,但自动上锁机箱总感不便.在软件运行其

【CBM666 请教屏蔽鼠标】
我现在是用VB模拟键盘与鼠标,第一阶段已搞定,但自动上锁机箱总感不便.

在软件运行其间,setcursorpos经常会用到自动定位自动点击, 因此我必须防止他人乱动鼠标, 乱动肯定会点错地方的,

曾见过有真假鼠标, 请教各位思路......谢谢。

[解决办法]
你的系统是触摸屏的?还是带了硬件鼠标的啊?
如果是触摸屏的,那么Hook掉触摸消息?
[解决办法]

探讨
也可以采用遮蔽的方案
1)自己置顶一个透明度极高(alpha = 1)的全屏窗口,这样所有的鼠标消息都由这个窗口接收,可以在鼠标事件中弹一个对话框“不许动鼠标!”
2)要操作目标软件时,通过异形窗口的方式在全屏窗口上开一个洞,就可以正常操作了,然后再恢复完整的全屏窗口。

[解决办法]
USB鼠标就简单点,直接枚举设备禁用就可以了
PS/2的就有点麻烦

禁用设备具体可以用
SetupDiGetClassDevs
SetupDiEnumDeviceInfo
SetupDiGetDeviceRegistryProperty
SetupDiDestroyDeviceInfoList
SetupDiSetClassInstallParams
SetupDiCallClassInstaller
等API来处理
我写了个VC的过程,你可以参考一下
C/C++ code
//********************************************************************************//**   函 数 名 :    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;} 

热点排行