这是一个触摸板虚拟键盘按钮。当我按下屏幕上的“TOUCH”时,将显示“ab”。我正在尝试使用BlockInput来防止在按下TOUCH按钮后2秒内输入任何鼠标和键盘。但它不起作用,我认为需要为BlockInput设置一个计时器,any1知道怎么做?这是我的代码:
public partial class TRY
{
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "BlockInput")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);
}
public void TOUCH(string key)
{
if (key == "Press")
{
PressAndRelease("a");
PressAndRelease("b");
ReleaseKeys();
TRY.BlockInput(true);
Thread.Sleep(2000);
TRY.BlockInput(false);
}
}
答案 0 :(得分:0)
BlockInput()无法在触摸设备上可靠地工作,因为鼠标消息通常被路由为触摸消息,反之亦然。阻止触摸输入有两种方法:
1)HID类过滤器驱动程序安装,将阻止来自HID设备的所有触摸消息。需要开发过滤器驱动程序,并且需要具有内核代码签名功能的代码签名证书才能在非测试计算机上安装驱动程序
2)挂钩所有进程,32位和64位,并在此期间阻止所有消息,包括触摸消息,如下所示:
hkKey = SetWindowsHookEx(WH_CALLWNDPROC, procTouchMsg, hInstHookDll, 0);
hkKey2 = SetWindowsHookEx(WH_CALLWNDPROCRET, procTouchMsg, hInstHookDll, 0);
hkKey3 = SetWindowsHookEx(WH_GETMESSAGE, procTouchMsg, hInstHookDll, 0);
hkKey4 = SetWindowsHookEx(WH_SYSMSGFILTER, procTouchMsg, hInstHookDll, 0);
hkKey5 = SetWindowsHookEx(WH_MSGFILTER, procTouchMsg, hInstHookDll, 0);
hkKey6 = SetWindowsHookEx(WH_MOUSE, procTouchMsg, hInstHookDll, 0);
hkKey7 = SetWindowsHookEx(WH_MOUSE_LL, procTouchMsg, hInstHookDll, 0);
hkKey8 = SetWindowsHookEx(WH_KEYBOARD, procTouchMsg, hInstHookDll, 0);
hkKey9 = SetWindowsHookEx(WH_KEYBOARD_LL, procTouchMsg, hInstHookDll, 0);
然后从procTouchMsg函数返回NULL。要小心 - 这可能会禁用设备的所有输入,因此要么在几秒钟后停止挂钩,要么排除某些重要过程的挂钩。