AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Maus sperren während Tastatureingabe
Thema durchsuchen
Ansicht
Themen-Optionen

Maus sperren während Tastatureingabe

Ein Thema von blackdrake · begonnen am 17. Nov 2008 · letzter Beitrag vom 8. Apr 2010
 
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#12

Re: Maus sperren während Tastatureingabe

  Alt 18. Nov 2008, 23:02
Der MMF Übertragungsweg funktioniert nun.

Ein Problem habe ich noch bei der Verwerfung des Mausklicks. Ich verstehe nicht ganz, wie das getan werden soll. WM_NULL ist ja scheinbar falsch, aber was soll dann als Result zurückgegeben werden?

Ausschnitt Anwendung:

Delphi-Quellcode:
procedure TForm1.WndProc(var Message:TMessage);
var
  difference: DWORD;
begin
  if Message.Msg = WM_ANYKEY_PRESSED then
  begin
    inherited WndProc(Message);

    // Eine Taste wurde gedrückt, wir merken uns den Zeitpunkt
    last_keyboard_input := GetTickCount();
  end
  else if Message.Msg = WM_LMOUSECLK_CONFIRM then
  begin
    difference := GetTickCount() - last_keyboard_input;

    if (difference <= sperrdauer) then
    begin
      // Ereignis verwerfen, da linke Maustaste innerhalb
      // der Sperrzeit gedrückt wurde

      // Der DLL melden, dass das Hook die Mausnachricht verwerfen soll.
      Message.Result := 10;

      // Debug: Zeigen, dass etwas gesperrt wurde
      label2.Caption := 'Sperrung: ' + IntToStr(GetTickCount());
    end
    else
    begin
      // Sonstiges Mausereignis bzw. Mausklick außerhalb
      // der Sperrzeit erlauben
      inherited WndProc(Message);
    end;
  end
  else
  begin
    // Andere Ereignisse durchlassen
    inherited WndProc(Message);
  end;
end;
Ausschnitt DLL:

Delphi-Quellcode:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  res: Cardinal;
begin
  Result := CallNextHookEx(Mouse_HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit;
    FALSE:
      begin
        // Handelt es sich um einen linken Mausklick?
        if (wParam = WM_LBUTTONDBLCLK) or
           (wParam = WM_LBUTTONDOWN) or
           (wParam = WM_LBUTTONUP) then
        begin
          // Dann Anwendung fragen, ob das OK ist

          SendMessageTimeOut(TargetHandle, WM_LMOUSECLK_CONFIRM, wParam, lParam,
                             SMTO_ABORTIFHUNG or SMTO_BLOCK, MsgTimeOut, res);

          if res = 10 then
          begin
            // Mausklick verwerfen
            Result := WM_NULL; // ToDo: Funktioniert nicht...
          end;
        end;
      end;
  end;
end;
Die "10" ist die Rückantwort, die sagen soll, dass das Mausereignis verworfen werden soll.
Daniel Marschall
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz