Announcement

Collapse
No announcement yet.

wie fange ich eine botschaft ab??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wie fange ich eine botschaft ab??

    tagchen,

    ich möchte wenn irgendwo in windows ein Mausklick ausgeführt wird
    eine bestimmte aktion durchführen.
    wie fange ich die mausklicks ab bzw. stelle fest, wann einer war??

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus

    bei Delphi 5.0 gibt es eine Komponente Namens TApplicationEvents
    dort hat es unter Ereignisse ein Feld das mit OnMessage bezeichnet ist. Mit diesem Ereignis kannst du alle Windows-Botschaften abfangen.
    Bei früheren Delphi-Versionen musst du beim Create des Hautformulars die Zuweisung selbst vornehmen."Application.OnMessage := ApplicationEventsMessage;"
    <br>
    Z.Bsp.
    <br>
    procedure THauptbild.ApplicationEventsMessage(var Msg: tagMSG;var Handled: Boolean);
    begin
    if (Msg.message = WM_LButtonDown) or (Msg.message = WM_KeyDown) then
    Beep;
    end

    Comment


    • #3
      Hallo Markus1 und Markus2,

      die Frage von Markus1 (m.lemke) zielt darauf ab, Mausklicks auch dann zu erkennen, wenn sie nicht über dem eigenen Fenster ausgelöst werden. Die neue Delphi 5-Komponente <b>TApplicationEvents</b> kann aber nur die Botschaften erkennen, die für das eigene Programmfenster bestimmt sind.

      Die Frage ist seit einigen Tagen unbeantwortet - und das hat auch einen Grund ;-)<br>
      Es gibt zwei Möglichkeiten, um Mausklicks systemweit abzufangen: <br>
      1. Die eigene Anwendung setzt einen sogenannten <b>Maus-Fang</b> (Capture), so das Windows alle Botschaften nur noch (!) zur eigene Anwendung durchstellt. Ein Beispiel dazu habe ich zu einer anderen Frage von Markus1 bereits vorgestellt. <br>
      2. Die eigene Anwendung setzt einen System-<b>Hook</b>, indem die Win32-API-Funktion <b>SetWindowsHookEx</b> für einen <b>WH_MESSAGE</b>-Hook aufgerufen wird. In diesem Fall muss die eigene Anwendung eine DLL bereitstellen, die dann von Win32 automatisch in die fremden Adressräume der betroffenen Prozesse geladen wird. Somit kann diese DLL sich in die Botschaftsverwaltung der fremden Anwendung als T-Verteilungsstück einklinken (d.h. die anderen Anwendung laufen ungestört weiter, nur die eigene Anwendung wird über die Aktionen informiert).

      Ein System-Hook ist eine kritische Angelegenheit, bei der man ganz genau wissen muss, was man tut. Borland hat auf seinen Web-Seiten eine umfassende Beispielanwendung (<b>The Windows API: An Example Of Use</b>, die aktuelle URL ist mir aber entfallen). Vor einiger Zeit war auf den Borland-Webseiten auch der Beitrag <b>How can I create a system wide keyboard hook under Win32?</b> zu finden, der sich noch ausführlicher mit allen Problemen bei der Implementierung beschäftigt hat

      Comment


      • #4
        tag markus,

        tagMSG kennt delphi 1 nicht gibt es das nur ab delphi 2?? dann muß ich es daheim probieren!!
        herr kosch, danke für den hinweis wobei wir wieder beim thema sind. HOOK!!!!

        mfg

        maku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment

        Working...
        X