Welches Event bei Win11 Fenster teilen?

  • Bei Win 11 kann ich mit Maus über Max-Button auf dem aufpoppenden Fenster auswählen, wie der Bildschirm geteilt wird und welche Position mein Fenster dann einnimmt. Das ist grundsätzlich erst mal schön.

    Mein Problem:
    Wie hier erwähnt, schreibe ich ein AddOn zur Nutzung von Git in SciTE. Unter anderem habe ich in die SciTE-Toolbar Icons integriert zur Anzeige von Status und Anzahl von untracked files (oder modified).
    Sieht dann so aus

    kein Repo vorhanden        Repo ist aktuell       Repo - 7 Dateien untracked    Repo - >9 Dateien untracked

             

    Ich zeichne die Icon mit WinAPI-Funktionen in die Toolbar. Bei Neuzeichnen des SciTE-Fensters geht das natürlich verloren und muss ebenfalls neu gezeichnet werden.
    Das kann ich grundsätzlich prima abfangen, indem ich einen Größenvergleich (pos/size) des Fensters durchführe und bei Änderung neu zeichne. Fenster verschieben / Größe ändern / Minimieren / Maximieren - alles führt zur Änderung bei WinGetPos.
    Nur halt die Größenänderung über den Max-Button, wie anfangs beschrieben. ändert die auf diese Weise abgefragte Fenstergröße nicht. :(

    Habt ihr eine Idee?

    Hier mein Skript ( P.S. - Das Skript muss von Hand abgeschossen werden, ist zum Dauerlauf gedacht :whistling: )

  • Abgesehen davon das ich das super toll von dir finde BugFix , habe ich da wirklich keinen wirklichen Ansatz auf Anhieb.
    Hoffe natürlich auf Unterstützung durch einige Andere hier noch, doch eine 90 % Lösung ist auch schon mal was. Es müssen nicht immer die 100 % sein 😅 .

    Danke und bis später.
    Viele Grüße
    Sven

  • vielleicht kann man den Redraw des Scite Fenster auch hooken😁

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hätte ich vllt. erwähnen sollen: Shellhook hatte ich bereits probiert. Ich habe dafür aber ausschließlich Bsp. für selbst erstellte Fenster gefunden (damit funktioniert das) - mit Fremdfenstern habe ich bisher keinen Erfolg gehabt. :(

  • teste mal, ob damit dein Event mit abgefangen wird ;)

    ist nicht von mir (Danyfirex) : https://www.autoitscript.com/forum/topic/18…comment=1321545

    ich hab nur alle Events eingefügt zum Testen. Der Start von Notepad ist nur als Beispiel gedacht. Der Hook reagiert auch auf Scite ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (6. Februar 2024 um 09:44)

  • Der Hook reagiert auch auf Scite

    Ja, Danke.

    Aber leider ist die Reaktion bei Verwendung des Split-Screen-Dialogs etwas ernüchternd:

    Code
    $HSHELL_RUDEAPPACTIVATED: 
    	PID: -1
    	ClassName: 
    	hWnd: 0x00000000

    Ohne Handle kann ich leider nicht erkennen, ob das von SciTE ausgelöst wurde.

    EDIT: Als Alternative bliebe natürlich: Mit dem obigen Ergebnis könnte das von SciTE ausgelöst worden sein - Also löse ich eine Prüfung aus.
    Aber ... nee, geht nicht - ich prüfe ja derzeit sowieso mit AdlibRegister im 350 ms Intervall und WinGetPos() liefert keine Änderung!
    Also: Auf Verdacht neu zeichnen als letzte Alternative. :whistling:

    INFO: Habe das auch mal im EN-Forum gepostet https://www.autoitscript.com/forum/topic/21…ls_1529931_menu

  • hmm, ja war mein Denkfehler.
    Natürlich reagiert der Hook nur auf das Scite Fenster aus dem das Script gestartet wurde.

    Andernfalls muss der Hook ja auf BS-Ebene "installiert" werden.

    Also entweder machst du einen "alternativ-Loader" á la SciTE-GIT für SciTE. Dann haste auch den Hook,

    oder du lebst mit diesem "Makel".

    Ich kann damit leben ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • versuch mal die hook.dll von LazyDalooza: https://www.autoitscript.com/forum/topic/75…&comment=582620

    hier noch der Download der dll: https://www.autoitscript.com/forum/topic/60…&comment=458286

    Du kannst m.E. nach alle WM_ Events aus der Windows_Constants.au3 einbinden und an die dll schicken.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich hab mal ein wenig mit diesem "hook" Zeug rumgespielt. :)

    ich konnte die System Events identifizieren, die bei jeder Fenster größenänderung angezogen werden:

    $EVENT_SYSTEM_CAPTURESTART, $EVENT_SYSTEM_CAPTUREEND

    Ist sicher nicht 100% richtig für die Identifikation des Events, aber damit sollten alle Fenster Movements abgefangen werden.
    Funktioniert bei jedem Fenster auf deinem Desktop.
    Eine Anpassung an Fentertitel, PID oder ähnliches kannst du sicher selbst vornehmen um einzugrenzen. ;)

    Ach ja, und eine hook.dll brauchste dafür auch nicht. Funktion kommt aus der user32.dll :)

    Der WinTitle für diese neue Win11-Funktion der Fenster Größenänderung ist: "PopupHost" ;)

    2. Demo:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (10. Februar 2024 um 12:06)

  • ich hab mir mit obigen funktion die WindowTitle mit ausgegeben .

    Da tauchte das auf wenn ich über das Fensteranordnungs-Tool die Gui verschoben habe.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • aber wenn du mein erstes Script anwendest, dann kannst du doch den WinTitle und die HexCodes extrahieren und danach filtern.

    siehe:

    wenn dein ActiveWindows danach Scite Ist, dann musst du neu zeichnen.

    Ich dachte damit kann man das abfangen

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • aber wenn du mein erstes Script anwendest, dann kannst du doch den WinTitle und die HexCodes extrahieren und danach filtern.

    Ja klar, habe ich jetzt auch so implementiert:

    AutoIt
    Func _WinEventProc($_hHook, $_iEvent, $_hWnd, $_idObject, $_idChild, $_iEventThread, $_iEventTime)
    	Local $PID = WinGetProcess($_hWnd), $sEventProcName = _ProcessGetName($PID)
        Select
            Case $sEventProcName = 'SciTE.exe'
                _CheckSciTE()   ; SciTE Handles lesen, Variablen setzen, Prüfung Größenänderung
            Case WinGetTitle($_hWnd) = 'PopupHost' And _WinAPI_GetClassName($_hWnd) = 'Xaml_WindowedPopupClass'
                _ReDraw(True)   ; ohne jede Prüfung neu zeichnen
        EndSelect
    EndFunc

    Das funktioniert soweit auch. Aber für PopupHost muss ich auf Verdacht immer neu zeichnen, da sich eine Relation zu SciTE für mich nicht sicher herstellen lässt.

    Nur ein Verhalten ist seltsam:
    Bei Events: RESTORE und PopupHost erfolgt das Neuzeichnen erst, wenn ich den Fokus auf das SciTE-Fenster durch Mausklick aktiviere. Ein _WinAPI_SetFocus($gm_SciTE.hWnd) ist erfolglos.

  • ich unterstütze dich gern wo ich kann, brauche dazu aber deinen code ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • brauche dazu aber deinen code

    So, aber jetzt.

    In der zip ist der Code mit Unterverzeichnis ico aus dem die Icon geladen werden. Das Skript bringt beim Start 2 Icon zur Anzeige. Hier das Verhalten bei den Events:

    Event

    Neu Zeichnen Icon

    RESTOREerst nach Klick ins Fenster sichtbar
    MAXIMIZE Titelleiste Dialog-ButtonOK
    MAXIMIZE Titelleiste DblClickerst nach Klick ins Fenster sichtbar
    SIZINGOK
    PopupHost - Dialogerst nach Klick ins Fenster sichtbar

    In den Funktionen zum Zeichnen von Status-Icon (#140) und Counter-Icon (#155) setze ich zum Abschluss den Fokus auf das SciTE Fenster, was jedoch nicht denselben Effekt hat, wie ein Klick ins Fenster. Da bei einem weiteren Arbeiten in SciTE sowieso ins Fenster geklickt werden muss, ist das jetzt nicht wirklich dramatisch - nur unschön.
    Ich hatte auch probiert WinActivate zu verwenden nach dem Schließen des PopupHost, leider auch wirkungslos.