[ERLEDIGT]Button über anderen Anwendungen als Overlay

  • Hallo Zusammen,

    Ich versuche aktuell einen Button in einer Externen Anwendung einzublenden als wäre dieser Button Teil der Anwendung.
    Dieser Button soll dann anhand des Fenster Titels auf einen Ordner verlinken.

    Bis jetzt habe ich den folgenden Code:

    Problem was ich irgendwie nicht lösen kann ist das ich gerne diesen Button nur dann anzeigen lassen will wenn ein Fenster mit "Homework" im Titel aktiv ist. ( Es kann mehrere Fenster mit der ähnlichen Bezeichnung geben ) Wenn was anderes Aktiv ist, was nicht "Homework" soll er ausgeblendet werden.

    Wenn ich bei Zeile 24 den WinSetOnTop durch den GUISetState ersetze, habe ich aber das Problem das wenn das Fenster inaktiv war und wieder aktiv wird, er sozusagen graphisch mehrmals reloaded und hängt.

    Hat einer einen Tipp wie ich das anders lösen kann ?

    Vielen Dank

  • Ich hätte es so gemacht:
    (muss man den Button nicht selbst mitverschieben, minimieren, etc.)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    Opt("GUIOnEventMode",1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $first=true
    $hGui = GUICreate("OtherHW", 100, 25, 10,10, $WS_POPUP)
    $Button = GUICtrlCreateButton("Bilder", 0, 0, 100, 25)
    GUICtrlSetOnEvent(-1,"_GibTitle")
    ;GUICtrlSetState(-1,$GUI_ONTOP)
    GUICtrlSetBkColor(-1, 0xFFFF00)
    GUISetState(@SW_HIDE,$hGui)

    [/autoit] [autoit][/autoit] [autoit]

    While sleep(100)
    if StringInStr(WinGetTitle("[active]"),"Homework ") then
    if $first then
    $first=false
    GUISetState(@SW_SHOW,$hGui)
    $handle=WinGetHandle("[active]")
    _WinAPI_SetParent($hGui,$handle)
    elseif NOT WinActive($handle) then
    $handle=WinGetHandle("[active]")
    _WinAPI_SetParent($hGui,$handle)
    endif
    endif
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _gibTitle()
    msgbox(48,"",WinGetTitle($handle))
    EndFunc

    [/autoit]

    Irgendwo ist da aber noch nen kleiner Fehler... Der Button wird erst angezeigt, wenn man an die Stelle klickt, wo er sein sollte (oben links im Fenster)

  • Bei mir ( Im SciTE ) Wird er direkt angezeigt :)

  • Vielen Dank für diesen Lösungsweg.

    Jedoch habe ich bei dieser Variante das Problem das wenn ich das Fenster Maximiere er anfängt zu buggen.
    Dieses Zeigt sich so das er die Position die angegeben wurde nicht mehr hält. Er verbleibt auf seiner Position, sobald ich dann das Fenster wieder normalisiere verschwindet es einfach.

  • Ich habe meine Code mittlerweile etwas ändert, und nun habe ich dieses ewige wieder laden nicht mehr.
    Er macht es zwar immer noch aber nur noch 2-3 mal bei mir.
    Durch die Sleep befehle in Zeile 23 und 26 läuft es nun soweit....

    Was aber nun nicht funktioniert ist der Button selbst...

    Spoiler anzeigen
  • EDIT: FEHLER WOHL GEFUNDEN ICH SPIELE BISSCHEN UND POSTE LÖSUNG DANN

    Spoiler anzeigen


    Okay.... :D

    Ich versuche mich da gerade reinzulesen aber so wirklich schlau werde ich daraus nicht....

    Wenn Ich es richtig verstehe muss ich mein Zeil mit GUItarget angeben und mit TargetaddButton den Button hinzufügen?

    Aber er haut mir da einen Fehler raus, Zeile 185 targetaddchild Funktion unbekannt.

    Sorry aber mit UDF kenne ich mich null aus, und das scheint echt kompliziert zu sein... Kannst du mir ein Anhaltspunkt geben ?


    EDIT: FEHLER WOHL GEFUNDEN ICH SPIELE BISSCHEN UND POSTE LÖSUNG DANN

    Spoiler anzeigen

    4 Mal editiert, zuletzt von MLE2007 (12. Februar 2015 um 12:26)

  • So meinen Fehler gefunden Bug Fixer...

    So bekomme ich zwar meinen Button, aber ich habe das selbe verhalten wie über die Winapi funktion. Sobald ich maximiere habe ich das selbe verhalten :(
    Es verhart in der ursprünglichen Position

    Spoiler anzeigen
    Code
    $targetctl = _GuiTarget ("Homework")
    $btnhide = _TargetAddButton("Bilder", 30,40, 100, 100,-1,-1, $targetctl)
    GUISetState(@SW_SHOW)
    While 1
    
    
    WEnd
  • So Funktioniert es nun, kann geschlossen werden, vielen dank für die Hilfe und neuen ideen

    Spoiler anzeigen