WinActive

  • Hallo zusammen,

    ich bräuchte mal wieder ein bissel Hilfe bei meinem aktuellen Projekt . Ich möchte eine vorhandene Gui um ein paar Buttons erweitern mit den ich zB Textbausteine an die aktuelle Anwendung senden kann. Wenn ich z.B. im Word arbeite, befindet sich mein Tool auf dem 2. Bildschirm und ein klick auf den Button soll den Text in Word einfügen. Problem ist nur, wenn ich WinActive verwende ist dann meine Anwendung aktiv und nicht mehr Word.

    ich müsste glaub das Aktive Fenster früher abfragen - bevor sich der Focus ändert - bäruchte sowas wie MouseOver aber leider hab ich so eine Funtkon nicht entdeckt -

    hat jemand eine idee wie man das lösen könnte ?

    Danke Widdow

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Du könntest aber auch einen anderen Ansatz wählen. Automatisiere nicht das GUI von Word, sondern verwende die COM Schnittstelle (entweder über die Word UDF oder in dem Du Word direkt über COM Methoden ansprichst). Dann ist egal, ob das Word-Fenster aktiv ist oder nicht.

  • Du könntest aber auch einen anderen Ansatz wählen. Automatisiere nicht das GUI von Word, sondern verwende die COM Schnittstelle (entweder über die Word UDF oder in dem Du Word direkt über COM Methoden ansprichst). Dann ist egal, ob das Word-Fenster aktiv ist oder nicht.

    Danke für deine Antwort - das ist aber glaub nicht so mein weg, da es weniger um Word anwendungen geht (hatte das nur als Beispiel - es geht mehr um verschiedene VNC anwendungen - teils werden da mehrere Fenster gleichzeitig genutzt - ich glaub da wird das nicht sooo gut funktionieren aber dennoch danke


    Schau dir dazu die Function _WinAPI_GetWindow an. ; ==>> $GW_HWNDNEXT - The retrieved handle identifies the window below the specified window in the Z order.

    Das hört sich sehr interesant an - da werd ich mich mal einlesen müssen... Zumindest schein die Funktion ganz schön "umfangreich..." Mal schauen ob ich´s hin bekomm - vielen Dank schonmal bis hier her

    WiDDoW

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Hallo nochmal,

    hab das mal in einem miniscript versucht umzusetzen - aber es gelingt mir nicht...

    Eigentlich wäre das Missionsziel Gui Starten, klick auf "Notepad" und dann auf "last Tool" sollte das Array öffnen und im Kopf die Notepad zeile anzeigen. Bei mir wird fast immer "Default IME" ausgegeben. Jemand ne idee was ich falsch mache.

    Danke

    WiDDow

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Jemand ne idee was ich falsch mache.

    Ja, hier machst du was falsch, aber daran allein liegt es nicht. Die Funktion _WinAPI_GetWindow liefert nicht das Ergebnis, dass ich erwartet habe.

    local $hLastWindow = _WinAPI_GetWindow ( $hGUi, $GW_HWNDNEXT +1)

    Mit +1 wolltest du wohl das vorletzte aktive Window ermitteln... das ginge dann so:

    Code
    Local $hLastWindow = _WinAPI_GetWindow($hGUi, $GW_HWNDNEXT)
    Local $hLastLastWindow = _WinAPI_GetWindow($hLastWindow, $GW_HWNDNEXT)

    Ich habe hier aber mal etwas mit _WinAPI_SetWinEventHook gebastelt... evtl. hilft dir das weiter, wobei ich denke, dass es mit VNC-Anwendungen nicht funktioniert, aber so bekommst du schon mal das zuletzt aktive Window.

    Einmal editiert, zuletzt von Bitnugger (24. April 2020 um 05:41) aus folgendem Grund: _WinAPI_SetWinEventHook_Test erweitert: Insert, Replace und Apped Text.

  • Mit +1 wolltest du wohl das vorletzte aktive Window ermitteln... das ginge dann so:

    Ne eigentlich wollte ich das nicht - das waren dann so die verzweiflungstaten, weil ohne nicht das gewünschte Ergebnis raus kommt (natürlich hatte ich es auch ohne und mit "-1" versucht. aber irgendwie geht das nicht. Aber dein Beispiel mit SetWinEventHook sieht echt gut aus - glaub da würd ich mir gern was raus "extrahieren"X/ Ich finde es auch sehr schade dass es zu _WinAPI_GetWindow() kein HilfeBeispiel gibt. Aber egal.

    Vielen Dank für Eure Hilfe und allen ein schönes WE

    (und GESUND BLEIBEN!! )

    WiDDoW

    Für Rechtschreibfehler gibt es keinen Finderlohn!!