以编程方式启用/禁用多点触控手指输入? [英] Programmatically enable / disable multitouch finger input?

查看:111
本文介绍了以编程方式启用/禁用多点触控手指输入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台运行Windows 7且具有多点功能的平板电脑.

但是,当使用手写笔并且离显示屏太远时,我经常不小心用手指敲击它,这会引起不必要的鼠标单击.

该解决方案导航到控制面板-笔和手指输入-手指输入",并取消选中将手指用作输入设备"复选框(所有标题均已翻译,因此在英文窗口中可能会有所不同). /p>

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

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

有人知道如何访问此属性(不使用UI自动化)吗?

解决方案

这可以通过操作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); 
}

(我不为此功劳, 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 )

I have a multitoch-enabled tablet PC running Windows 7.

However, when using the stylus pen and getting too far away from the display, I often accidently hit it with my fingers which causes unwanted mouse-clicks.

The solution is navigating to "Control Panel - Pen- and Finger Input - Finger Input" and deactivate the checkbox "Use the finger as an input device" (all titles translated so they might be different on an English windows).

Now I am wondering whether I can do this programmatically, too, so I would be able to write a little tray app for this.

I tried using Process Monitor to find out registry keys, however, I did not find one which really shows the same effect as the checkbox.

Does anyone know how to access this property (without using UI-Automation)?

解决方案

This can be done by manipulating the MICROSOFT_TABLETPENSERVICE_PROPERTY flag set.

#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); 
}

(I am not taking the credits for this one, soure)

The important parameter is the hWnd handle you pass to SetProp. GetDesktopWindow returns the handle of the desktop window. Setting this for the desktop window should deactivate it for all windows on the desktop and the desktop itself. Note however that this won't be a constant change (reboot will undo it).

Possible values you can use are

#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 )

这篇关于以编程方式启用/禁用多点触控手指输入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆