Wie kann ich ein externes Fenster in eine GUI hinein laden?

  • Wie kann ich ein externes Fenster in eine GUI hinein laden?
    Es sollte so "eingebettet" werden:

    Spoiler anzeigen


    habs mal so probiert:

    Spoiler anzeigen
    [autoit]

    _TEST()
    Func _TEST()
    $win = WinExists(WinGetTitle(""),"")
    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $win, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $win, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $win, "hwnd", $hGUI)
    EndFunc

    [/autoit]

    funktioniert leider nicht...
    kann mir vl. jemand ein Demoskript mit dem Notepad coden?

    bitte um Hilfe

  • ^^
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    $hGUI = GUICreate("",1024,768,-1,-1,BitOR($GUI_SS_DEFAULT_GUI,$WS_CLIPCHILDREN))
    GUISetState()

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

    Run("notepad")
    WinWait("Unbenannt - Editor")

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

    _WinAPI_SetParent(WinGetHandle("Unbenannt - Editor"),$hGUI)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Edit: Wow, ich steh ja sogar in den Credits auf dem Screenshot :O

  • @ SEuBo: Kannst Du mal ein Screen posten wie das aussehen sollte?
    Wenn ich dein Testscript starte erscheint die Autoit-Gui, kurz das Notepad und verschwindet dann wieder, so das wieder nur die Autoit-Gui zu sehen ist.

    Benutze Win7 Home Prem. als 64 Bit.

    Thx, Andy


  • yeah!

    Danke, funzt perfekt!

  • leider das selbe ergebnis, auch wenn ich es per rechtsklick "als admin ausführen" starte.
    dennoch besteht solange das autoit-fenster auf ist auch der notepad-prozess.

    schade, wenn das klappen würde, könnte ich es in ein anderes script von mir einarbeiten,
    war nämlich schon auf der suche nach sowas.

  • leider das selbe ergebnis, auch wenn ich es per rechtsklick "als admin ausführen" starte.
    dennoch besteht solange das autoit-fenster auf ist auch der notepad-prozess.

    schade, wenn das klappen würde, könnte ich es in ein anderes script von mir einarbeiten,
    war nämlich schon auf der suche nach sowas.


    Deaktivier mal die Benutzerkontensteuerung vl. hilft das ja was ;)


    ---> hab noch ne Frage.

    Gibt es eine Möglichkeit, ALLE Fenster eines Prozesses abzufangen und in die GUI zu packen?

  • Gibt es eine Möglichkeit, ALLE Fenster eines Prozesses abzufangen und in die GUI zu packen?

    jap

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    Run("notepad")
    Run("notepad")
    Run("notepad")
    Sleep(3000)

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

    $hGUI = GUICreate("", 1024, 768, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
    GUISetState()

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

    _SetParentByProcessName('notepad.exe', $hGUI)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func _SetParentByProcessName($sProcessName, $hParent, $iFlag = 0)
    ;Oscar, edit by SEuBo
    Local $aProcessList, $aWinList
    $aProcessList = ProcessList($sProcessName)
    If @error Then Return
    $aWinList = WinList()
    If $aWinList[0][0] = 0 Then Return
    For $i = 1 To $aWinList[0][0]
    For $j = 1 To $aProcessList[0][0]
    If WinGetProcess($aWinList[$i][1]) = $aProcessList[$j][1] Then
    _WinAPI_SetParent($aWinList[$i][1], $hParent)
    If $iFlag Then Return
    EndIf
    Next
    Next
    EndFunc ;==>_SetParentByProcessName

    [/autoit]
  • Ich könnt das Heulen anfangen.....genau so eine Funktion suchte ich immer...und nun hab ich das anderst gelöst.... ;(


  • wooow... einfach faszinierend was mit dieser "simplen" Skriptsprache möglich ist