Benachrichtigung wann ein Fenster verändert wird.

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

    Benachrichtigung wann ein Fenster verändert wird.

    Hallo,

    gibt es die Möglichkeit eine Nachricht - Windows Message oder ähnliches - zu bekommen sobald das aktive Fenster in seiner Größe oder Position verändert wird ?
    (Aktives Fenster ist eine beliebige Anwendung oder ein Fenster einer beliebigen Anwendung!)

    Klar kann man via Api die Größe und Position des aktiven Fensters abfragen, aber eine Schleife oder ähnliches ist nicht gut.

    Gruss

    mikeb69
    Hallo Julian,

    ich red nicht von meiner eigenen Anwendung.
    Mir geht es um fremde Anwendungen.

    Beispiel:
    Notepad wird vom Windowsbenutzer gestartet - nicht von meinem Programm !!
    Ich möchte nun immer Wissen wann eine Größen- oder Positionsänderung von Notepad erfolgt.

    Möglichst ohne Schleifen und ähnliches verwenden zu müssen.

    Gruss

    mikeb69
    Moin Mike,
    kann man sich nicht iwie in die MessageLoop des Fensters reinhängen und dann die interessierenden Codes rausfiltern?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany,

    das ist im Prinzip der Weg den ich gehen will.

    Bleibt nur die Frage ob ich einen Hook auf WM_SIZE und WM_MOVE setzen kann.
    Klar ist, das ich das über die SetWindowsHookEx Api lösen muss.

    Gruss

    mikeb69
    Zuerst liest du die alte WNDPROC Funktion aus(diese musst du später manuell aufrufen)

    Quellcode

    1. oWndProc As IntPtr = GetWindowLong(fensterHandle, GWL_WNDPROC)

    Dann erzeugst du deine neue WndProc:

    Quellcode

    1. Function WndProc( hWnd As IntPtr, Msg As UInt32, ushort WParam, LParam As UInt32)As UInt32
    2. //Hier Messages filtern(kannst auch filtern, ob sie ausgeführt werden sollen oder nicht(indem du CallWindowProc nicht ausführen lässt z.B.)
    3. Return CallWindowProc(oWndProc, hWnd, Msg, WParam, LParam )
    4. End Function
    5. 'Entsprechenden Deleagten:
    6. Private Delegate Function WindowsCallback(hWnd As IntPtr,Msg As Uint32, WParam As UShort, LParam As UInt32)As UInt32

    Jetzt musst du die WndProc nur noch hooken:

    Quellcode

    1. SetWindowLong(hWnd, GWL_WNDPROC, New WindowsCallback(WndProc))//liefert True wenn erfolgreich

    So müsste das ca. funktionieren
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo jvbsl,

    danke, ich denke du hast mir geholfen.
    Oft liegt es nur daran das man die richtigen Begriffe nicht kennt.

    Was ich hier machen will nennt sich scheinbar Subclassing.

    Hab hier ein ausführlicheres Beispiel gefunden.

    Versuch das sobald ich Zeit habe mal.

    EDIT:

    oder in meinem Fall vielleicht besser das hier.

    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikeb69“ ()