Программно включить / отключить мультитач-ввод пальцем? - PullRequest
4 голосов
/ 14 января 2010

У меня планшетный ПК с поддержкой мультитох, работающий под управлением Windows 7.

Однако при использовании стилуса и удалении от дисплея я часто случайно ударяю его пальцами, что вызывает нежелательные щелчки мыши.

Решением является переход к «Панели управления - Ввод пером и пальцем - Ввод пальца» и отключение флажка «Использовать палец в качестве устройства ввода» (все названия переведены, поэтому они могут отличаться в английских окнах).

Теперь мне интересно, могу ли я сделать это тоже программно, поэтому я бы смог написать для этого небольшое приложение в трее.

Я пытался использовать Process Monitor для поиска разделов реестра, однако я не нашел ни одного, который действительно демонстрирует тот же эффект, что и флажок.

Кто-нибудь знает, как получить доступ к этому свойству (без использования UI-Automation)?

1 Ответ

4 голосов
/ 24 января 2010

Это можно сделать, манипулируя установленным флагом 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 )

Важным параметром является дескриптор hWnd, который вы передаете в SetProp. 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)

...