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.