Frage: bezüglich Button aus einem externen Programm in eigenes GUI spiegeln

  • Hallo Leute,

    ich habe mal eine Frage ob es möglich ist Buttons,Progressbars oder sonstiges Controls in das eigene gui zu spiegeln.

    Mit
    ControlMove ( "title", "text", controlID, x, y [, width [, height]] )
    habe ich es bereits geschaft im Externen Programm die Buttons etc. zu verschieben jedoch nur in dessen Fenster.

    Ich möchte versuchen das externe Programm zu verstecken und dessen Buttons in mein Eigenes GUI zu spiegeln sprich auch das Design des Buttons soll mitgespiegelt werden.

    Ist das überhaupt möglich was ich mir da ausgedacht habe ?

  • Jedoch versteh ich nicht wofür man so ein Aufwand treiben sollte?

    Wenn man ein Programm "Cloned", dann könnte dies böse absichten haben?! Wenn ein User denkt, er gibt Daten (Passwörter etc...) in das "richtige" Programm ein und das "böse" Programm empfängt die Daten, dann könnte eine Art Keylogger entstehen.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Geht es dir lediglich um das Design (also bildliche Darstellung des Controls) oder soll dieses auch wie dieses auch funktionieren und auf aktionen agieren?

  • Sonst ist das ganze recht simpel, und hat mich gerade auf eine Idee gebracht :whistling:

    EDIT: Viel Spaß: (Kannste beliebig unten erweitern ;))

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <GUIEdit.au3>
    #include <GUIButton.au3>

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

    #cs EXAMPLE
    MsgBox(0,0,ControlClone("Unbenannt - Editor", "TESTGUINew", "Edit1"))
    sleep(10000)
    #ce

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

    Func ControlClone($hGUIOld, $hGUINew, $hCtrl)
    $hCtrl = ControlGetHandle($hGUIOld, "", $hCtrl)
    $sText = ControlGetText($hGUIOld, "", $hCtrl)
    $aPos = ControlGetPos($hGUIOld, "", $hCtrl)
    $sType = DLLCall("user32.dll", "int", "GetClassName", "hWnd", $hCtrl, "str", "", "int", 256)
    If not IsArray($sType) Then
    return -1
    Else
    $sType = $sType[2]
    EndIf
    If $sType = "Edit" Then
    return _GUICtrlEdit_Create(WinGetHandle($hGUINew), $sText, $aPos[0], $aPos[1], $aPos[2], $aPos[3])
    ElseIf $sType = "Button" Then
    return _GUICtrlButton_Create(WinGetHandle($hGUINew), $sText, $aPos[0], $aPos[1], $aPos[2], $aPos[3])
    EndIf
    EndFunc

    [/autoit]
    Spoiler anzeigen

    Überraschung!


    MfG Donkey

    2 Mal editiert, zuletzt von ProgrammingDonkey (24. März 2015 um 20:02)

  • Vielen Dank das ist schonh mal ein Anfang jedoch noch nicht ganz dass was ich brauche, jedoch ist es ein rießen fortschritt^^ Danke
    Ich versuche noch das Design des Buttons zu kopieren.

  • Rein theoretisch kannst du zu dem control einzelne messages senden um ein screenshot vom jeweiligen zustand des controls zu machen. Danach musst du lediglich die paint messages vom gleichen controltyp uberschreiben und die kopierten screenshots anzeigen. Funktioniert bei einem button natuerlich besser als bei einem edit control. Besser ist es natuerlich doch lieber das design der controls per hand zu verfassen da du da mehr spielraum hast. Beides ist sowieso auf gleicher weise aufwendig.