2013-01-12 10 views

Odpowiedz

9

Usługa RegisterTouchWindow nie jest już wymagana w przypadku aplikacji Win 8.

O ile wiem, istnieje kilka sposobów na osiągnięcie celu z pewnymi ograniczeniami.

  1. This article here Działa na Win 7 & 8. Ale wymagany jest identyfikator dostawcy i identyfikator produktu z ekranem dotykowym. Istnieje możliwość, że aplikacja nie będzie działać poprawnie z niektórymi urządzeniami dotykowymi.

  2. Użyj RegisterPointerInputTarget na Win 8 z mojego debugowania, mechanizm Windows 8 touch ma swoje unikalne cechy. Pomiędzy jednym dotknięciem a jednym dotknięciem wszystkie zdarzenia dotykowe będą wysyłane do okna, które odbiera pierwsze zdarzenie dotykowe, bez względu na to, czy okno jest zminimalizowane lub zasłonięte przez inne okno, czy też ustawiono atrybut WS_EX_TRANSPARENT w późniejszym okresie. Zdarzenia dotykowe między jednym naciśnięciem a zwolnieniem mogą być udostępniane tylko innemu okienka, jeśli pierwszy zostanie zniszczony. Za pomocą tego interfejsu API wszystkie zdarzenia dotykowe będą wysyłane do zarejestrowanego okna. Inne okna nie mogą już odbierać zdarzeń dotykowych, dopóki nie zostanie wywołane UnregisterPointerInputTarget przez zarejestrowane okno lub dane wejściowe dotyku zostaną wprowadzone z powrotem do systemu za pomocą InjectTouchInput. "Wejście wstrzyknięte przez zarejestrowany cel wejściowy nie zostanie przechwycone." Proszę zauważyć, że do korzystania z tego interfejsu API wymagany jest dostęp do UI. Próbkę można znaleźć w here.

  3. Hak do systemu Windows. W przypadku aplikacji na komputer w Win 7/8 zdarzenia dotykowe można łatwo podłączyć za pomocą SetWindowsHookEx z WH_CALLWNDPROC lub WH_GETMESSAGE. W przypadku aplikacji Metro w Win 8 tylko pierwszy wskaźnik może zostać wykryty w pętli komunikatów okna. Chociaż zdarzenie wskaźnika może nastąpić przez kliknięcie lub dotknięcie, GetPointerType może powiedzieć, czy jest to wskaźnik dotykowy czy wskaźnik myszy. Próbki do używania haków można znaleźć pod adresem here.

Kod urywek dla obsługi zdarzeń palików:

switch(Msg) 
{ 
... 
case WM_POINTERENTER: 
case WM_NCPOINTERDOWN: 
case WM_NCPOINTERUP: 
case WM_NCPOINTERUPDATE: 
case WM_POINTERACTIVATE: 
case WM_POINTERCAPTURECHANGED: 
case WM_POINTERDOWN: 
case WM_POINTERLEAVE: 
case WM_POINTERUP: 
case WM_POINTERUPDATE: 
    { 
     UINT32 pointerId = GET_POINTERID_WPARAM(wParam); 
     POINTER_INPUT_TYPE pointerType; 

     if (GetPointerType(pointerId, &pointerType)) 
     { 
      if (pointerType == PT_TOUCH) 
      { 
       ... 
      } 
     } 
    } 
    break; 
... 
+0

Dzięki za pomoc. Czy masz jakieś przykłady powyższych? – blez

+0

Dodałem łącze i fragment kodu do korzystania z haka systemu Windows. Nie jestem pewien, czy są to przykłady, których potrzebujesz. – Luke

+0

FYI dla rozwiązania Window Hook, w systemie Windows 7, zarówno dla haczyków WH_CALLWNDPROC, jak i WH_GETMESSAGE, działają w drugim procesie, więc standardowy błąd i standardowe wyjście nie są wyświetlane zgodnie z oczekiwaniami. Zamiast tego utwórz plik i zaloguj się do pliku. I żaden nie wydaje się uzyskać WM_INPUT lub WM_TOUCH na Windows 7. Teraz mam surowe wejście działa jak binarnie, tak dotyk jest w użyciu lub nie jest używany, który działa poprawnie, gdy mysz sprzętowa jest aktywna, czy nie. Dzięki za post. – phyatt

Powiązane problemy