0

这是一个触摸板虚拟键盘按钮。当我按屏幕上的“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);
        }
    }
4

1 回答 1

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。请注意 - 这可能会禁用您设备的所有输入,因此在几秒钟后停止挂钩或排除某些重要进程的挂钩。

于 2017-10-08T14:58:11.987 回答