【问题标题】:Programmatically enable / disable multitouch finger input?以编程方式启用/禁用多点触控手指输入?
【发布时间】:2011-01-05 04:33:07
【问题描述】:

我有一台支持多点触控的平板电脑,运行 Windows 7。

但是,当我使用触控笔并离显示器太远时,我经常不小心用手指敲击它,从而导致不必要的鼠标点击。

解决方案是导航到“控制面板 - 笔和手指输入 - 手指输入”并取消激活“将手指用作输入设备”复选框(所有标题都已翻译,因此它们在英文窗口上可能会有所不同)。

现在我想知道我是否也可以通过编程方式执行此操作,因此我可以为此编写一个小托盘应用程序。

我尝试使用 Process Monitor 来查找注册表项,但是,我没有找到与复选框真正显示相同效果的注册表项。

有谁知道如何访问这个属性(不使用 UI-Automation)?

【问题讨论】:

    标签: winapi windows-7 multi-touch


    【解决方案1】:

    这可以通过操作MICROSOFT_TABLETPENSERVICE_PROPERTY 标志集来完成。

    #include <tpcshrd.h>  
    
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  {   
        const DWORD_PTR dwHwndTabletProperty =  
            TABLET_DISABLE_PRESSANDHOLD | // disables press and hold (right-click) gesture  
            TABLET_DISABLE_PENTAPFEEDBACK | // disables UI feedback on pen up (waves)  
            TABLET_DISABLE_PENBARRELFEEDBACK | // disables UI feedback on pen button down  
            TABLET_DISABLE_FLICKS; // disables pen flicks (back, forward, drag down, drag up)   
        ATOM atom = GlobalAddAtom(MICROSOFT_TABLETPENSERVICE_PROPERTY);   
        SetProp(hWnd, MICROSOFT_TABLETPENSERVICE_PROPERTY, reinterpret_cast (dwHwndTabletProperty));  
        GlobalDeleteAtom(atom); 
    }
    

    (我不会为这一个学分,soure

    重要的参数是传递给 SetProp 的 hWnd 句柄。 GetDesktopWindow 返回桌面窗口的句柄。为桌面窗口设置此项应该会为桌面上的所有窗口和桌面本身停用它。但是请注意,这不会是一个持续的变化(重新启动会撤消它)。

    您可以使用的可能值是

    #define TABLET_DISABLE_PRESSANDHOLD        0x00000001
    #define TABLET_DISABLE_PENTAPFEEDBACK      0x00000008
    #define TABLET_DISABLE_PENBARRELFEEDBACK   0x00000010
    #define TABLET_DISABLE_TOUCHUIFORCEON      0x00000100
    #define TABLET_DISABLE_TOUCHUIFORCEOFF     0x00000200
    #define TABLET_DISABLE_TOUCHSWITCH         0x00008000
    #define TABLET_DISABLE_FLICKS              0x00010000
    #define TABLET_ENABLE_FLICKSONCONTEXT      0x00020000
    #define TABLET_ENABLE_FLICKLEARNINGMODE    0x00040000
    #define TABLET_DISABLE_SMOOTHSCROLLING     0x00080000
    #define TABLET_DISABLE_FLICKFALLBACKKEYS   0x00100000
    #define TABLET_ENABLE_MULTITOUCHDATA       0x01000000
    

    (http://msdn.microsoft.com/en-us/library/bb969148%28VS.85%29.aspx)

    【讨论】:

    • 感谢您的回复。
      但是,我发现使用 SetProp 无法实现我想要的行为。两个问题:将此应用于桌面句柄在其他窗口中没有效果。我遇到的第二个问题更糟:这些标志会影响笔和手指(触摸)输入——这不是我想要的;我想在它们之间切换。
    • 可能会出现第二个问题,因为我在示例中同时包含了笔和触摸 - 只需使用您要操作的参数 ;-)
    • 嗯 - 那么哪些值只会影响手指输入?在单个窗口上,我尝试了 TABLET_DISABLE_PRESSANDHOLD(易于检查)和 TABLET_DISABLE_TOUCHSWITCH - 都显示效果一支笔/手写笔以及手指/触摸输入。 TOUCHUIFORCEON/OFF 似乎不会影响窗口对触摸/手写笔输入的行为。
    • 如果 PENXXX 和 TOUCHXXX 常量没有区别,那我就放弃了 ;-) 不幸的是,我自己无法测试任何东西,我没有支持触控的设备。跨度>
    • 好吧 - 看来你必须放弃 - 它们实际上会影响手写笔和手指输入。看起来他们的名字很混乱......
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多