Gui in eniem bestimmtem Fenster

  • So ich bräuchte eure hilfe wiedermal :)
    diemal geht darum wie man zb. eine gui in einem bestimmten fenster anzeigen lassen kann.
    Also ich habe eine transparente Gui nur mit buttons, so nun wn ich zb. Icq , msn , mozilla firefox oder sonstige programme öffne das dan die transparente gui auch mit öffnet und auch wieder mit schließt wen das fenster also Icq ,msn , oder mozialla auch geschlossen werden.
    und wens geht , das ich hoffe, das ich bestimmen kann das die buttons sich auch mit dem fenster bewegen sobald sich das fenster die positon ändert.
    wäre echt klasse wen mir jemand da hilft .

    mfg Secret1994

  • Hi,

    du kannst dir das jeweilige Winhandle suchen und dann nen GUI erstellen mit den Styles POPUP und TOPMOST.
    Dann musste die GUI in deinem Programm nur noch anhand der Position des Zielfensters verschieben und nur anzeigen wenn das Zielfenster aktiv ist.

    Mfg

  • Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    $hGUI = GUICreate("", 200, 100)
    GUIRegisterMsg($WM_PAINT,"_Redraw")
    GUIRegisterMsg($WM_MOVE,"_Redraw")
    GUICtrlCreateLabel("GUI und so", 20, 20)
    GUISetState(@SW_HIDE)
    Run("notepad")
    While 1 * Sleep(500)
    $hWnd = WinGetHandle("")
    If WinGetTitle($hWnd) = "Unbenannt - Editor" Then
    GUISetState(@SW_SHOW)
    _WinAPI_SetParent($hGUI, 0)
    _WinAPI_SetParent($hGUI, $hWnd)
    Sleep(100)
    WinMove($hGUI,"",0,0)
    _WinAPI_RedrawWindow($hGUI)
    While WinExists($hWnd) * Sleep(10)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd
    GUISetState(@SW_HIDE)
    EndIf
    WEnd
    Func _Redraw()
    _WinAPI_RedrawWindow($hGUI)
    EndFunc

    [/autoit]

    //EDIT: Das hier habe ich eben noch von Schnuffel bekommen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Constants.au3>
    #region - GUI Create
    DllCall("UxTheme.dll","int","SetThemeAppProperties","dword",0)
    $GUI = GUICreate('PopUp',12,14,-1,1,$WS_POPUP,$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    GUISetBkColor(_WinAPI_GetSysColor($COLOR_ACTIVEBORDER))
    $Button = GUICtrlCreateButton("2",0,0,16,14,$BS_CENTER)
    GUICtrlSetFont(-1,12,400,0,"Wingdings")
    DllCall("UxTheme.dll","int","SetThemeAppProperties","dword",3)
    GUISetState(@SW_SHOWNOACTIVATE)
    #endregion
    $hwnd = -1
    $w = 0
    CheckWin()
    AdlibRegister("CheckWin",100)
    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $Button
    MsgBox(0, '', "hi")
    WinActivate($hwnd)
    Case $hwnd <> $GUI And WinExists($hwnd)
    $pos = WinGetPos($hwnd)
    WinMove($GUI,"",$pos[0]+$pos[2]-$w,$pos[1]+6)
    EndSelect
    WEnd
    #endregion
    Func CheckWin()
    Local $hwnd1 = WinGetHandle("")
    If $hwnd1 <> $GUI And $hwnd <> $hwnd1 Then
    Global $hwnd = $hwnd1
    $Style = _WinAPI_GetWindowLong($hwnd,$GWL_STYLE)
    $w = 5
    If BitAND($Style,$WS_MINIMIZEBOX) Then $w += 30
    If BitAND($Style,$WS_SYSMENU) Then $w += 70
    If BitAND($Style,$WS_MAXIMIZEBOX) Then $w += 30
    EndIf
    EndFunc

    [/autoit]