Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Über Hook rechte Maustaste sperren (https://www.delphipraxis.net/37566-ueber-hook-rechte-maustaste-sperren.html)

yvesdaeschle 7. Jan 2005 12:35


Über Hook rechte Maustaste sperren
 
Hallo Zusammen,

ich hab einen Mousehook, welcher mir an mein Programm die Mousehooks schickt.
Jetzt möchte ich aber das klicken der rechten Maustaste verbieten... also sperren.

Was mucc ich da in meinem Mousehook änder?

Yves

generic 7. Jan 2005 12:47

Re: Über Hook rechte Maustaste sperren
 
wenn du damit windows funktionen platt machen willst dann mach das lieber über gruppenrichtlinien in windows.
den (datei-)explorer bekommst du damit klein.

gruss

yvesdaeschle 7. Jan 2005 13:10

Re: Über Hook rechte Maustaste sperren
 
Hi,

ich möchte die Maustaste eigentlich nur deaktivieren in Verbindung mit der Strg Taste.
Also wird Strg + Rechtemaustaste gedrückt... Message an mein Programm.

Problem dabei: Es wird dabei auf einem Textfeld immer das Popupmenü geöffnet, das möchte ich in diesem Fall nicht. Ansonsten darf die Maustaste machen was sie will.

Yves

Boombuler 7. Jan 2005 13:14

Re: Über Hook rechte Maustaste sperren
 
schlampiger weise könntest du mit GetKeyState gucken ob Strg gedrückt ist und wenn ja im MouseHook die Hookchain unterbrechen...


Greetz
Boombuler

yvesdaeschle 7. Jan 2005 13:16

Re: Über Hook rechte Maustaste sperren
 
Hi,

Delphi-Quellcode:
if wParam = WM_RBUTTONDOWN  then
  begin
     wParam := WM_NULL;
     lParam := 0;
  end;
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
Das habe ich Probiert, geht aber nicht. Was ist HookChain?? Und wie kann ich das unterbrechen?

Danke, Yves

Boombuler 7. Jan 2005 13:36

Re: Über Hook rechte Maustaste sperren
 
Delphi-Quellcode:
if wParam <> WM_RBUTTONDOWN  then
  begin
     Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  end;
Dadurch das du "CallNextHookEx" wegläst unterbrichst du die Hookchain!
habs jetzt nich groß probier aber so wie oben hassu mehr change musst dann nur noch nach Strg gedrückt prüfen

Greetz
Boombuler

PS: wie schreibst du n Hook wennu nicht weißt was die Hookchain is?

yvesdaeschle 7. Jan 2005 13:47

Re: Über Hook rechte Maustaste sperren
 
HI,

das mit der Hookchain, ist mir shcon klar, wusste nur nicht dass die so heißt!

Hab folgendes probiert:

Delphi-Quellcode:
if (TPMsg(lParam)^.message = WM_RBUTTONDOWN) or (TPMsg(lParam)^.message = WM_RBUTTONUP) then
        begin
          SendMessage(MMFData.WinHandle, WM_USER + 2706, wParam, lParam);
          Kill := True;
        end;

        if not Kill then // TPMsg(lParam)^.message := WM_NULL;
          Result := CallNextHookEx(MMFData.NextHook, Code, wParam, lParam)
Das mit dem Strg ist mir dann klar, aber leider funktioniert der Code nicht, weil immer noch die Funktion der rechten Maustaste funktioniert!

Sitz schon zwei Tage dran und weis einfach nicht weiter. Was für einen HookTyp muss ich denn verwenden, probiers gerade mit WH_GETMESSAGE, aber mit WH_MOUSE geht es auch nicht!

Yves

NicoDE 7. Jan 2005 13:50

Re: Über Hook rechte Maustaste sperren
 
Zitat:

Zitat von Boombuler
Dadurch das du "CallNextHookEx" wegläst unterbrichst du die Hookchain!

Richtig, aber 'unhöflich'...
Code:
Return Value

    If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.

    If nCode is greater than or equal to zero, and the hook procedure did not process the message, [color=red]it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_MOUSE hooks will not receive hook notifications and may behave incorrectly as a result.[/color] [color=green]If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.[/color]

yvesdaeschle 7. Jan 2005 13:53

Re: Über Hook rechte Maustaste sperren
 
Wie kann ich dann dennoch den Klick verhindern? Ohne das mitd em CallNectHookEx, wegzulassen was ohne hin auch nicht geht. Vielleicht liegt es ja auch dan dem WH_MOUSE??

yvesdaeschle 7. Jan 2005 14:24

Re: Über Hook rechte Maustaste sperren
 
:bounce1: :bounce1: Es geht!!

Ich Erstelle den Hook so: also mit WH_GETMESSAGE:

Delphi-Quellcode:
SetWindowsHookEx(WH_GETMESSAGE, MsgFilterFunc, HInstance, 0);
Und ich prüfe die Kombination von Strg und der rechten Maustaste so:

Delphi-Quellcode:
if (TPMsg (lParam)^.message = WM_RBUTTONUP) then
begin
  if GetASYNCKeyState (VK_CONTROL) <> 0 then
    TPMsg (lParam)^.message := WM_NULL;
end;
Result := CallNextHookEx(MMFData.NextHook, Code, wParam, lParam);
Ich ändere ja den Parameter, macht das was, gegenüber den anderen Programmen die diesen Hook verwenden?

Zitat:

Return Value

If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.

If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH _MOUSE hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.
Danke euch nochmal! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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