Desktop Child window > entweder blass oder durchklickbar

  • Hallo an alle,

    Ich habe mal wieder eine Nuss zu knacken: Ich möchte ein Fenster als Children in den Desktop eingliedern.
    Geht auch. Problem: entweder das Fenster lässt Mausklicks durch zum Desktop oder es wirkt blass ( außer bei schwarzem Desktop )
    als ob es hinter etwas anderem wäre oder selbst transparent

    Spoiler anzeigen
    [autoit]


    ; GUI 1 - Nicht blass, aber kann keine Mausklicks annehmen
    $WS_POPUP = 0x80000000
    $WS_EX_LAYERED = 0x00080000
    $hGUI1 = GUICreate( "" , 200 , 200 , 500 , 500 , $WS_POPUP , $WS_EX_LAYERED )
    GUISetBkColor( 0xff0000 )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI1 , "hwnd", _WinGetDesktopHandle() )
    DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI1, "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow )
    GUISetState()

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

    ; GUI 2 - Kann Mausklicks annehmen, ist aber blass
    $hGUI1 = GUICreate( "" , 200 , 200 , 800 , 500 , $WS_POPUP )
    GUISetBkColor( 0xff0000 )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI1 , "hwnd", _WinGetDesktopHandle() )
    GUISetState()

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

    HotKeySet("{ESC}", "_Exit")
    Func _Exit()
    Exit
    EndFunc

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

    While 1
    Sleep( 1000 )
    WEnd

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

    Func _WinGetDesktopHandle()

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

    $aWinList=WinList("[CLASS:WorkerW]")
    For $i=1 To $aWinList[0][0]
    $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]')
    If $hSHELLDLL_DefView<>'' Then
    $hDeskWin=$aWinList[$i][1]
    ExitLoop
    EndIf
    Next

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

    ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32
    $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]')

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

    Return SetExtended($hListView,$hDeskWin)

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

    EndFunc

    [/autoit]


    Wie bekomme ich es hin, dass das Fenster Klicks annimmt aber nicht blass ist? ( bitte erstmal keine Workarounds, das mit dem Childwindow hat Gründe )

    Tausend Dank schon mal

    Gruß

    Blues

  • Entschuldigung. Fixed. Wofür ist der andere eigentlich gut? Für andere Programmiersprachen?

  • Jepp, ist für andere Sprachen da.
    Was meinst du mit "kann keine Mausklicks annehmen"? (Wenn ich einen Button in GUI 1 einbaue wird ein Klick darauf problemlos erkannt)

  • Hallo CentuCore,

    Wirklich? Das klingt ja schon mal nach einem Hoffnungsschimmer. Kannst du den Code mal teilen?
    Wenn ich einen Button einbaue kann ich weiterhin zum Desktop durchklicken und zb ein Auswahlrechteck ziehen.
    Aber das mit der Blässe ist bei dir auch?

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>
    #include <SendMessage.au3>
    #include <WinAPI.au3>

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

    Global Const $SC_DRAGMOVE = 0xF012

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

    Func moveBoxObject( $hWnd , $Msg , $wParam , $lParam )

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

    $HWND_BOTTOM = 1
    $SWP_NOACTIVATE = 0x0010
    $SWP_NOMOVE = 0x0002
    $SWP_NOSIZE = 0x0001

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

    ;~ _WinAPI_SetWindowPos( $hWnd , $HWND_BOTTOM , 0 , 0 , 0 , 0 , $SWP_NOMOVE + $SWP_NOSIZE )

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

    _SendMessage( $hWnd , $WM_SYSCOMMAND , $SC_DRAGMOVE , 0 )

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

    EndFunc

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

    Func minWin( $hWnd , $Msg , $wParam , $lParam )

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

    ConsoleWrite( 'wm size' & @CRLF )

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

    EndFunc

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

    ;~ $WM_LBUTTONDBLCLK
    ;~ $WM_MBUTTONDBLCLK
    ;~ $WM_RBUTTONDBLCLK

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

    ;~ $WM_LBUTTONDOWN
    ;~ $WM_MBUTTONDOWN
    ;~ $WM_RBUTTONDOWN

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

    boxCreate()

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

    Global $hGUI1

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

    Func boxCreate( $x = 50 , $y = 50 , $width = 500 , $heigth = 500 , $boxColor = 0xEA0000 )

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

    Global $hGUI1

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

    $WS_EX_NOACTIVATE = 0x8000000
    $borderWidth = 5

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

    ;~ $hGUI1 = GUICreate( "" , $width , $borderWidth , $x , $y , $WS_POPUP , $WS_EX_NOACTIVATE , WinGetHandle("Program Manager") )
    ;~ $hGUI1 = GUICreate( "" , $width , $borderWidth , $x , $y , $WS_POPUP , $WS_EX_NOACTIVATE , $hDeskWin )
    $hGUI1 = GUICreate( "" , $width , $borderWidth , $x , $y , $WS_POPUP , $WS_EX_NOACTIVATE )
    GUISetBkColor( $boxColor )
    GUISetState()
    GUIRegisterMsg ( $WM_LBUTTONDOWN , "moveBoxObject" )

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

    GUIRegisterMsg ( $WM_SIZE, "minWin" )

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

    _WinAPI_SetWindowPos( $hGUI1 , 0x0001 , 0 , 0 , 0 , 0 , 0x0002 + 0x0001 ) ; $HWND_BOTTOM = 0x0001 | $SWP_NOMOVE = 0x0002 | $SWP_NOSIZE = 0x0001

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

    ;~ _WinAPI_SetWindowLong( $hGUI1 , $GWL_USERDATA , )

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

    $hDeskWin = _WinGetDesktopHandle()

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

    $GWL_USERDATA = -21
    $GWL_HWNDPARENT = -8

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

    ;~ _WinAPI_SetWindowLong( $hGUI1 , $GWL_HWNDPARENT , $hDeskWin ) ; Owner setzten ( Fenster bleibt Top-Level-Fenster )

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

    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI1 , "hwnd", $hDeskWin )

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

    ;~ ConsoleWrite( @CRLF & $hDeskWin & @CRLF & WinGetHandle("Program Manager") & @CRLF )

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

    ;~ SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, HandleWinEvent,0,0,0);
    ;~ EVENT_SYSTEM_MINIMIZESTART
    ;~ EVENT_SYSTEM_FOREGROUND
    ;~ EVENT_SYSTEM_DESKTOPSWITCH
    ;~ EVENT_OBJECT_LOCATIONCHANGE
    ;~ if (myHandle == GetForegroundWindow()) break;

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

    ;~ $hGUI2 = GUICreate( "" , $width , $borderWidth , $x , $y + $heigth , $WS_POPUP )
    ;~ GUISetBkColor( $boxColor )
    ;~ GUISetState()
    ;~ GUIRegisterMsg ( $WM_LBUTTONDOWN , "moveBoxObject" )
    ;~ DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI2 , "hwnd", $hDeskWin )

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

    ;~ $hGUI3 = GUICreate( "" , $borderWidth , $heigth + $borderWidth , $x + $width , $y , $WS_POPUP )
    ;~ GUISetBkColor( $boxColor )
    ;~ GUISetState()
    ;~ GUIRegisterMsg ( $WM_LBUTTONDOWN , "moveBoxObject" )
    ;~ DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI3 , "hwnd", $hDeskWin )

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

    ;~ $hGUI4 = GUICreate( "" , $borderWidth , $heigth , $x , $y, $WS_POPUP )
    ;~ GUISetBkColor( $boxColor )
    ;~ GUISetState()
    ;~ GUIRegisterMsg ( $WM_LBUTTONDOWN , "moveBoxObject" )
    ;~ DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI4 , "hwnd", $hDeskWin )

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

    EndFunc

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

    ;~ $hTestGui1 = GUICreate( "")
    ;~ $hTestGui = GUICreate( "" , 250 , 50 , 50 , 50 , -1 , -1 , $hTestGui1 )
    ;~ GUISetState()

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

    HotKeySet("{ESC}", "_Exit")
    Func _Exit()
    Exit
    EndFunc

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

    While 1

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

    ;~ ConsoleWrite( WinGetState( $hTestGui1 ) & @CRLF )

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

    Sleep( 1000 )
    ;~ $GUIMsg = GUIGetMsg()
    ;~ Switch $GUIMsg
    ;~ Case $GUI_EVENT_MINIMIZE

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

    ;~ ConsoleWrite( 'Mini' & @CRLF )
    ;~ EndSwitch

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

    WEnd

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

    Func _WinGetDesktopHandle()

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

    $aWinList=WinList("[CLASS:WorkerW]")
    For $i=1 To $aWinList[0][0]
    $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]')
    If $hSHELLDLL_DefView<>'' Then
    $hDeskWin=$aWinList[$i][1]
    ExitLoop
    EndIf
    Next

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

    ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32
    $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]')

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

    Return SetExtended($hListView,$hDeskWin)

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

    EndFunc

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WINAPI.au3>
    #include <SendMessage.au3>
    #include <WinAPI.au3>

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

    Global Const $SC_DRAGMOVE = 0xF012
    Global $hDeskWin

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

    Func moveBoxObject( $hWnd , $Msg , $wParam , $lParam )

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

    $HWND_BOTTOM = 1
    $SWP_NOACTIVATE = 0x0010
    $SWP_NOMOVE = 0x0002
    $SWP_NOSIZE = 0x0001

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

    ;~ _WinAPI_SetWindowPos( $hWnd , $HWND_BOTTOM , 0 , 0 , 0 , 0 , $SWP_NOMOVE + $SWP_NOSIZE )

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

    _SendMessage( $hWnd , $WM_SYSCOMMAND , $SC_DRAGMOVE , 0 )

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

    EndFunc

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

    Func minWin( $hWnd , $Msg , $wParam , $lParam )

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

    ConsoleWrite( 'wm size' & @CRLF )

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

    EndFunc

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

    boxCreate()

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

    Global $hGUI1
    Global $id_btn

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

    Func boxCreate( $x = 50 , $y = 50 , $width = 500 , $heigth = 500 , $boxColor = 0xEA0000 )

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

    Global $hGUI1

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

    $WS_EX_NOACTIVATE = 0x8000000
    $borderWidth = 5

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

    $hGUI1 = GUICreate( "" , $width , $heigth , $x , $y , $WS_POPUP , $WS_EX_LAYERED )
    Global $id_btn = GUICtrlCreateButton("Test", 50, 50, 100, 30)
    $hDeskWin = _WinGetDesktopHandle()
    GUISetBkColor( $boxColor )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI1 , "hwnd", $hDeskWin )
    _WinAPI_SetWindowPos( $hGUI1 , 0x0001 , 0 , 0 , 0 , 0 , 0x0002 + 0x0001 ) ; $HWND_BOTTOM = 0x0001 | $SWP_NOMOVE = 0x0002 | $SWP_NOSIZE = 0x0001
    DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI1, "dword", 0x00ff00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow )
    GUISetState()
    GUIRegisterMsg ( $WM_LBUTTONDOWN , "moveBoxObject" )

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

    EndFunc

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

    HotKeySet("{ESC}", "_Exit")
    Func _Exit()
    Exit
    EndFunc

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

    While 1

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

    ;~ ConsoleWrite( WinGetState( $hTestGui1 ) & @CRLF )

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

    ;~ Sleep( 1000 )
    $GUIMsg = GUIGetMsg()
    Switch $GUIMsg
    Case $GUI_EVENT_MINIMIZE

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

    ConsoleWrite( 'Mini' & @CRLF )
    Case $id_btn
    MsgBox(0, "Info", "Button wurde gedrückt!")
    EndSwitch

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

    WEnd

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

    Func _WinGetDesktopHandle()

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

    $aWinList=WinList("[CLASS:WorkerW]")
    For $i=1 To $aWinList[0][0]
    $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]')
    If $hSHELLDLL_DefView<>'' Then
    $hDeskWin=$aWinList[$i][1]
    ExitLoop
    EndIf
    Next

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

    ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32
    $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]')

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

    Return SetExtended($hListView,$hDeskWin)

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

    EndFunc

    [/autoit]

    Ich habe einfach dein GuiGetMsg() de-auskommentiert. (K.A. wie man das sonst nennen soll)
    Und einen Button erstellt.

    Achja, Blässe:
    Transparent ist es, wenn ich statt $WS_EX_NOACTIVATE, $WS_EX_LAYERED angebe, aber ansonsten blass (heller), nicht wirklich.
    Daher meine Frage: Sollte das Pink eigentlich rot sein?

    Mal abgesehen, davon.
    Anstatt diesen Megazeiler von Funktion kannst du auch einen Vierzeiler verwenden um das Handle des Desktop zu erhalten:

    Spoiler anzeigen
    [autoit]


    Func _DesktopHandle()
    Static Local $ret = DllCall("user32.dll", "GetDesktopWindow", "HWND")
    return( $ret[0] )
    EndFunc

    [/autoit]

    4 Mal editiert, zuletzt von CentuCore (28. November 2013 um 17:40)

  • Hallo CentuCore,

    Mir ist eine kleine Eselei unterlaufen. Das angehängte file sollte eigentlich den code im spoiler enthalten. War aber ein anderer Versuch von mir der viel zu viel code enthielt.
    Danke dass du dich trotzdem durchgekämpft hast. "GetDesktopWindow" ist leider keine Option, da mit diesem "Desktop" dort die Wurzel aller Fenster gemeint ist.
    Ich meine aber das Explorer-Fenster mit den bunten Icons, die Funktion ist also leider nötig.

    Ja, das rosa sollte eigentlich rot sein, das war das Problem. Entweder rosa oder keine Mausklicks. Durch deine Antwort habe ich mich nochmal rangesetzt und
    habe eine Lösung gefunden. Man muss nach dem Erstellen der GUI nochmal "winmove" einsetzen, das behebt das Problem mit dem Clickthrough. Warum? Keine Ahnung.

    Also nochmal vielen herzlichen Dank für deine Hilfe und hier der Code:

    [autoit]


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

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

    ; GUI 1 - DISAPPEARS - ...on toogle Desktop
    $hGUI = GUICreate("MyGUI", 50, 50, 50, 50, BitOR( $WS_POPUP, $WS_CHILD ), $WS_EX_TRANSPARENT , _WinAPI_GetDesktopWindow() )
    GUISetBkColor(0xFF0000)
    GUISetState(@SW_SHOW, $hGUI)

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

    ; GUI 2 - CLICKTROUGH - Cannot receive mouse clicks
    ;~ $WS_POPUP = 0x80000000
    $hGUI2 = GUICreate( "" , 200 , 100 , 200 , 200 , $WS_POPUP , 0x00080000 ) ; $WS_EX_LAYERED = 0x00080000
    GUISetBkColor( 0xff0000 )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI2 , "hwnd", _WinGetDesktopHandle() )
    DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI2 , "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow )
    GUISetState()

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

    ; GUI 2 - BLUR - Can receive mouse clicks but appears blur on non black background
    $hGUI3 = GUICreate( "" , 100 , 200 , 800 , 500 , $WS_POPUP )
    GUISetBkColor( 0xff0000 )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI3 , "hwnd", _WinGetDesktopHandle() )
    GUISetState()

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

    ; GUI 3 - GOOD - is not blurred and can receive mouse clicks
    $hGUI4 = GUICreate( "" , 200 , 100 , 200 , 200 , $WS_POPUP , 0x00080000 ) ; $WS_EX_LAYERED = 0x00080000
    GUISetBkColor( 0xff0000 )
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI4 , "hwnd", _WinGetDesktopHandle() )
    DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI4, "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow )
    WinMove( $hGUI4 , "" , 500 , 500 )
    GUISetState()

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

    HotKeySet("{ESC}", "_Exit")
    Func _Exit()
    Exit
    EndFunc

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

    $i = 11
    While 1

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

    $i += 15
    Sleep( 50 )
    ;~ WinMove( $hGUI1 , "" , $i , $i )

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

    WEnd

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

    Func _WinGetDesktopHandle()
    $aWinList=WinList("[CLASS:WorkerW]")
    For $i=1 To $aWinList[0][0]
    $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]')
    If $hSHELLDLL_DefView<>'' Then
    $hDeskWin=$aWinList[$i][1]
    ExitLoop
    EndIf
    Next
    ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32
    $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]')
    Return SetExtended($hListView,$hDeskWin)
    EndFunc

    [/autoit]