Announcement

Collapse
No announcement yet.

modale Dialoge erkennen

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

  • modale Dialoge erkennen

    Ich will die Maus ueber den Default-Button aller modalen Dialoge setzen.
    Wie man die Maus bewegt weiss ich.
    Wie erkenne ich das Oeffnen eines (fremden) modalen Dialogs?
    Moeglichst auch Systemdialoge. Ich habe bereits einen Shell Hook laufen.

  • #2
    Hallo,

    wenn schon ein eigener Hook verwendet wird, würde ich mich an WH_SYSMSGFILTER anklemmen. Im Microsoft Platform SDK steht dazu der folgende Satz: "<i>The WH_MSGFILTER hook can only monitor messages passed to a menu, scroll bar, message box, or dialog box created by the application that installed the hook procedure. The WH_SYSMSGFILTER hook monitors such messages for all applications. </i>".

    Mit dem Delphi-Tool WinSight würde ich dann nachschauen, über welche Botschaften (WM_INITDIALOG etc.) jeder Dialog eindeutig erkannt werden kann. Hat man dann erst einmal das Fensterhandle, kann über EnumWindows ein Childfenster von Typ BUTTON mit dem Stil BS_DEFPUSHBUTTON gesucht werden

    Comment


    • #3
      Herzlichen Dank. Damit sollten die notwendigen Programmteile fuer einen Maustreiber jetzt vollstaendig sein (bis auf die Treiber selbst)

      Comment


      • #4
        Typischer Fall von denkste.
        Bei einem WH_SYSMSGFILTER kommen keine WM_CREATE oder WM_INITDIALOG Messages. Statt dessen kommt unter anderem ein Timer (natuerlich undokumentiert). Am spannendsten ist eine Message $113 die regelmaessig kommt wie der Timer.
        Dazu gibt es keine passende WM_ Konstante. Schoenen Dank Microsoft fuer die undokumentierte Message.

        Im uebrigen darf man den Rueckgabewert von CallNextHookEx nicht zurueckgeben, sonst funktionieren Scrollbars nicht mehr.
        Der richtige Rueckgabewert ist 0.

        Irgendwie muss es aber gehen. ich hab esbereits gesehen

        Comment


        • #5
          Ups $113 ist der Timer. $118 ist die undokumentierte Message. WinSight zeigt sie als "wm_systimer"

          Comment

          Working...
          X