Einzelnen Beitrag anzeigen

Mossi

Registriert seit: 6. Feb 2004
Ort: Wenzenbach
35 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Hook WH_GESTURENOTIFY

  Alt 29. Jul 2015, 15:45
Jetzt hab ich es doch mal mit WM_TOUCH probiert. Das Ausgabe-Kontroll auf dem Lehrerschirm hab ich mit RegisterTouchWindow aktiviert und jetzt bekomme ich auch die WM_TOUCH Meldungen.
Jetzt muss das ganze nur noch im Hook verarbeitet werden und da hab ich dann gleich das nächste Problem:

hier meine HookProcedure, wie sie jetzt aussieht:
Delphi-Quellcode:
function TouchHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  GetTouchInputInfo: function (hTouchInput: HTOUCHINPUT; cInputs: UINT;
                     pInputs: PTOUCHINPUT; cbSize: Integer): BOOL; stdcall;
  res: Boolean;
  lib: Cardinal;
  touchInputs: array of TTouchInput;
  data: CWPSTRUCT;
begin
  Result := CallNextHookEx(Touch_HookHandle, nCode, wParam, lParam);
  if nCode < 0 then
    exit;

  if nCode = HC_ACTION then
  begin
    data := PCWPSTRUCT(lParam)^;
    case data.message of
      WM_GESTURENOTIFY: OutputDebugString('WM_GESTURENOTIFY');
      WM_GESTURE: OutputDebugString('WM_GESTURE');
      WM_TOUCH:
       begin
        OutputDebugString('WM_TOUCH');
        OutputDebugString(PChar(IntToStr(data.lParam) + '/' + IntToStr(data.wParam) + '/' + IntToStr(data.message)));
        lib := LoadLibrary(PChar('user32.dll'));
        if lib <> 0 then
        begin
          GetTouchInputInfo := GetProcAddress(lib, 'GetTouchInputInfo');
          if @GetTouchInputInfo <> nil then
          begin
            SetLength(TouchInputs, data.wParam);
            res := GetTouchInputInfo(HTOUCHINPUT(data.lParam),
              data.wParam, @TouchInputs, SizeOf(TTouchInput));
            if not res then
              OutputDebugString(PChar(SysErrorMessage(GetLastError)))
            else
              OutputDebugString(PChar(IntToStr(touchinputs[0].cxContact) + 'x' + IntToStr(touchinputs[0].cyContact)));
          end;
        end;
       end;
    end;
  end;
end;
Ich laufe jetzt leider immer in einen Fehler. Get TouchInputInfo liefert FALSE zurück und der Fehler von GetLastError ist "invalid handle"
Lieg ich da falsch, wenn ich davon ausgehe, dass in lParam das Handle drin steht? Oder ist es zu diesem Zeitpunkt bereits wieder ungültig.
MSDN schreibt folgendes:
Zitat:
The touch input handle received in the LPARAM of a touch message. The function fails with ERROR_INVALID_HANDLE if this handle is not valid. Note that the handle is not valid after it has been used in a successful call to CloseTouchInputHandle or after it has been passed to DefWindowProc, PostMessage, SendMessage or one of their variants.
  Mit Zitat antworten Zitat