Как перехватить сенсорный ввод в Windows 8

Я пишу настольное приложение для Windows 8 и хотел бы, чтобы оно появлялось, когда пользователь касался экрана (например) 4 пальцами. Я нашел этот вопрос:

Как обнаружить касание (касание ввод) глобально вместо щелчка мышью?

ответ предлагает 3 решения. Первый мне не подходит, так как я хотел бы написать приложение, которое работает на каждом планшете Win8.

Второй (RegisterPointerInputTarget) работает отлично (мое приложение перехватывает все возможные сенсорные вводы, даже когда активна стартовая панель или запущено метро-приложение), но в самой Windows начинают отсутствовать некоторые сенсорные возможности (например, я не могу прокручивать стартовую панель пальцем больше). Я попытался ввести сенсорный ввод обратно, но безуспешно:

if (message >= 0x0241 && message <= 0x024F)
{
    DWORD pointerID = LOWORD (wParam);
    POINTER_TOUCH_INFO pti;

    GetPointerTouchInfo (pointerID, &pti);
    InjectTouchInput (1, &pti);
}

(и да, я вызывал InitializeTouchInjection (10, 0x3); раньше). Кроме того, мне лично не нравится этот способ, поскольку в документах говорится, что только одно окно может зарегистрироваться для ввода указателя. Поэтому я не хочу, чтобы мое приложение занимало такой ресурс.

Третье решение (хуки) работает хорошо, но я не могу перехватывать касания из приложения метро или стартовой панели.

Кто-нибудь знает, как правильно перехватить весь сенсорный ввод на Windows 8? uiAccess=true не проблема, так как мое приложение будет подписано. Спасибо.


person Kde    schedule 12.05.2013    source источник
comment
Вы когда-нибудь находили решение этой проблемы? Если да, то было бы здорово, если бы вы им поделились! У меня такая же проблема.   -  person YasharBahman    schedule 27.06.2014
comment
К сожалению, до сих пор нет. В настоящее время я использую хуки, но (как я уже говорил) я не могу перехватывать сенсорный ввод из приложений магазина. То же самое справедливо и для Windows 10.   -  person Kde    schedule 25.01.2015
comment
@YasharBahman, наконец, я нашел способ добиться этого - я использую технику ввода HID, чтобы получать HID-сообщения от дигитайзера с сенсорным экраном, а затем анализирую их, чтобы подсчитать, сколько точек контакта в данный момент активно. Поэтому я могу запустить действие, когда этот счетчик достигнет предопределенного значения.   -  person Kde    schedule 07.04.2015
comment
интересно! Это имеет смысл, но поскольку вы используете hid, я полагаю, это означает, что вы можете получить копию ввода, но не можете его перехватить, верно? т.е. Нет способа предотвратить это прикосновение?   -  person YasharBahman    schedule 08.04.2015
comment
Да, этот метод не позволяет предотвратить попадание сенсорных сообщений в исходное приложение. Но, наверное, это нормально, так как обычные приложения ничего не делают на 3 и более сенсорных контактах.   -  person Kde    schedule 08.04.2015