Desktop-Handle unter Win XP

  • Hallo,

    ich habe ein kleines Programm was mir nach einer einstellbaren Zeit die Desktop-Icons ausblendet und beim Klick mit der mittleren Maustaste auf den Desktop die Icons wieder anzeigt, bis die Zeit wieder abgelaufen ist usw.

    Nach ein paar Problemchen läuft das ganze unter Win7 x64 jetzt wunderbar.
    Nun soll das ganze auch unter WinXP funzen.

    Und hier liegt mein Problem. Das ein- und ausblenden funzt wunderbar, nur die Maus will nicht so.
    Wenn die Icons ausgeblende sind erfolgt der Click nicht mehr auf dem Programm Manager (CLASS:Programm) sondern auf einem Win ohne Namen mit der Class #32769
    Und ich kriege einfach nicht den Handle dieses Fensters ermittelt um zu wissen das der Mausclick auch auf dem Desktop ist.
    Unter Win7 funzt

    [autoit]

    WinGetHandle("[CLASS:Progman]")

    [/autoit]


    Unter XP will

    [autoit]

    WinGetHandle("[CLASS:#32769]")

    [/autoit]

    aber nicht.
    Kann mir jemand helfen ??

    Hier die Infos von Au3Info

    Spoiler anzeigen

    >>>> Window <<<<
    Title:
    Class: #32769
    Position: 0, 0
    Size: 1280, 1024
    Style: 0x96000000
    ExStyle: 0x00000000
    Handle: 0x00010014

  • Okay, okay... Skript kommt
    Das Prog funzt halt unter Win7 & XP zur Zeit so, das man per PAUSE-Taste die Anzeige der Destop-Icons umschalten kann.

    Unter Win7 funzt es auch noch, das man bei ausgeschalteten Icons und einem Mittelmausklick auf den leeren Desktop die Icons wieder eingeschaltet werden.
    Nur unter XP halt nicht.
    Mir fehlt halt in Zeile 23 zum Fenstervergleich der Handle des leeren Desktops (unter WinXP halt Class #32769 - siehe [url='http://msdn.microsoft.com/en-us/library/windows/desktop/ms633574(v=vs.85).aspx#system']Link )

    [autoit]


    #Include <Misc.au3>
    #Include <WinAPI.au3>
    HotKeySet("{PAUSE}", "_ToggleDesktopIconsKey")
    HotKeySet("{ESC}", "_quit")
    Global $Struct = DllStructCreate($tagPoint)
    Global $hDeskWin
    Global $hProgMWin
    Global $hListView
    Global $desktopstate = 1

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

    _ToggleDesktopIcons(1)
    $dll = DllOpen("user32.dll")
    While 1
    If _IsPressed("04", $dll) Then _MausClick(1)
    Sleep(100)
    WEnd

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

    Func _MausClick( $change )
    DllStructSetData($Struct, "x", MouseGetPos(0))
    DllStructSetData($Struct, "y", MouseGetPos(1))
    $hwnd = _WinAPI_WindowFromPoint($Struct)
    If $hwnd = $hProgMWin then
    Beep(500,100)
    _ToggleDesktopIcons( 1 )
    EndIf
    EndFunc

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

    Func _quit()
    Exit
    EndFunc

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

    Func _ToggleDesktopIconsKey()
    _ToggleDesktopIcons(2)
    EndFunc

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

    Func _ToggleDesktopIcons( $setstate )
    Local $state
    _initDesktop()
    Local $hnd = $hDeskWin

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

    Switch $setstate
    Case 0
    $desktopstate=$setstate
    Case 1
    $desktopstate=$setstate
    Case Else
    $desktopstate=1
    $state=WinGetState($hDeskWin, "")
    If BitAnd($state, 2) Then $desktopstate=0
    EndSwitch
    If $desktopstate = 0 Then
    WinSetState($hnd, "", @SW_HIDE)
    Else
    WinSetState($hnd, "", @SW_SHOW)
    EndIf
    EndFunc

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

    Func _initDesktop()
    Local $aWinList,$i
    $hDeskWin = WinGetHandle("[CLASS:Progman]")
    $hProgMWin = $hDeskWin
    $hListView = ControlGetHandle($hDeskWin,'','[CLASS:SysListView32; INSTANCE:1]')

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

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

    [/autoit]