AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mousehook: gedrückter Mbutton->keine Nachr. an Prog.
Thema durchsuchen
Ansicht
Themen-Optionen

Mousehook: gedrückter Mbutton->keine Nachr. an Prog.

Ein Thema von OrallY · begonnen am 21. Dez 2003 · letzter Beitrag vom 22. Dez 2003
Antwort Antwort
Benutzerbild von OrallY
OrallY

Registriert seit: 29. Apr 2003
268 Beiträge
 
#1

Mousehook: gedrückter Mbutton->keine Nachr. an Prog.

  Alt 21. Dez 2003, 16:02
Ich habe einen Maushook installiert der meinem Programm eine Nachricht schickt, wenn die sich die Maus bewegt. Der Hook verhindert auch, dass andere Programme noch eine Mausnachricht empfangen können (Grund: ich will auf den Desktop zeichnen).
Das klappt auch alles Wunderbar bei ungedrückter Maustaste. Doch wenn ich in irgendeinem Fenster eine Maustaste drücke und gedrückt halte, wird meinem Programm nur noch so lange eine Nachricht gescickt, wie die Maus sich über diesem Fenster befindet. Wenn sie über die Fenstergrenze hinausbewegt wird, kommt bei meinem Prog nix mehr an, erst wieder, wenn sie sich wieder über dem Fenster befindet.

Woran liegt das, und wie kann ich das beheben?

Der Maushook:

Delphi-Quellcode:
library mousehook;

uses
  Windows,
  Messages;

const
  WM_HOOKMAP = WM_USER + $0400;

var
  HookHandle : HHook;
  FileMapObj : THandle;
  FileMapView : ^Integer;

function MouseHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if code = HC_ACTION then
  begin
    FileMapObj := OpenFileMapping(FILE_MAP_READ, False,'MouseHookMapFile');
    if FileMapObj <> 0 then
    begin
      FileMapView := MapViewOfFile(FileMapObj, FILE_MAP_READ, 0, 0, 0);
      PostMessage(FileMapView^, WM_HOOKMAP, wParam, lParam);
      UnmapViewOfFile(FileMapView);
      CloseHandle(FileMapObj);
    end;
  end;
  {Das auskommentieren sorgt dafür, dass niemand anderes Mausnachrichten bekommen kann (ich weiß, ist vielleicht nicht das sauberste, aber es funktioniert wenigstens}
  //Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure InstallMouseHook; stdcall;
begin
  HookHandle := SetWindowsHookEx(WH_MOUSE, @MouseHookProc, hInstance , 0);
end;

procedure UninstallMouseHook; stdcall;
begin
  UnhookWindowsHookEx(HookHandle);
end;

exports
InstallMouseHook,
UninstallMouseHook;

begin
end.
.oO'rallY
Linux is like a tipi: no gates, no windows and a gnu-eating apache inside...
  Mit Zitat antworten Zitat
Benutzerbild von OrallY
OrallY

Registriert seit: 29. Apr 2003
268 Beiträge
 
#2

Re: Mousehook: gedrückter Mbutton->keine Nachr. an Prog.

  Alt 22. Dez 2003, 12:38
Wie mich Assarbad aufklärte:
Zitat:
Mouse-Capturing ... was du erlebst sind die Auswirkungen von
Mouse-Capturing. Drueckst du die Taste ueber einem anderen Fenster, wird das Fenster u.U. so
lange den Nachrichteninput haben, wie die Taste gedrueckt bleibt (so
funktioniert EDA).
Dies ließe sich mit einem globalen Hook umgehen. Ein globaler Maushook ist WH_MOUSE_LL. Das Problem was aber bei der Benutzung dieses Hooks auftritt, ist das man die Maus bei auslassen des CallNextHookEx völlig blockiert. Mal davon abgesehen gibts den Hook nur auf NT basierten Systemen.

Doch habe ich mein Problem nun viel einfacher lösen können (Dank an obbschtkuche): Ich weite die Form auf den ganzen Bildschirm aus und verhindere mit Brush.Style := bsClear, dass sie gezeichnet wird. Trotzdem kann sie Nachrichten empfangen.
.oO'rallY
Linux is like a tipi: no gates, no windows and a gnu-eating apache inside...
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz