Hallo,
ich hatte mal ein Script, wo einer GUI Schatten per Windows-Style hinzugefügt wurde. Also so: GUICreate("Bla", 100, 100, -1, -1, $WS_SCHATTEN)
Weiß jemand, wie das nochmal ging?
Hallo,
ich hatte mal ein Script, wo einer GUI Schatten per Windows-Style hinzugefügt wurde. Also so: GUICreate("Bla", 100, 100, -1, -1, $WS_SCHATTEN)
Weiß jemand, wie das nochmal ging?
ich bin mir niht ganz sicher aber das müsste mit einer dllcall der uxtheme dll realisierbar sein. aber welche funktion der dll das genau ist weiß cih leider auch nicht genau
Bitte, habe gerade eine Funktion gemacht:
#include<WindowsConstants.au3>
#include<GUIConstantsEx.au3>
#include<SendMessage.au3>
$GUI = GUICreate("Drop Shadow", 200, 200, -1, -1)
_WinSetShadow($GUI)
$chkShadow = GUICtrlCreateCheckbox("Shadow", 10, 10, 100, 20)
GUICtrlSetState(-1, 1)
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $chkShadow
If BitAND(GUICtrlRead($chkShadow), 1)=1 Then
_WinSetShadow($GUI)
Else
_WinSetShadow($GUI, '', False)
EndIf
EndSwitch
WEnd
#include<SendMessage.au3>
; #FUNCTION# ====================================================================================================================
; Name...........: _WinSetShadow
; Description ...: Sets the Dropshadow for a window
; Syntax.........: _WinSetShadow($hWnd, $sText='', $fShadow=True)
; Parameters ....: $hWnd - Handle or title of window
; $sText - [optional] Text of window
; $fShadow - [optional] Enable or disable shadow (default: True)
; Return values .: Success - 1
; Failure - 0, sets @error to:
; |1 - no window or OS version too low
; |2 - error on fetching ClassLong
; |3 - error on setting ClassLong
; |4 - other error
; Author ........: ProgAndy
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
Func _WinSetShadow($hWnd, $sText='', $fShadow=True)
; Author: ProgAndy
$hWnd = WinGetHandle($hWnd, $sText)
If Not IsHWnd($hWnd) Or @OSBuild < 2600 Then Return SetError(1,0,0)
Local $res = DllCall("User32.dll", "ULONG", "GetClassLong", "hwnd", $hWnd, "int", -26)
If @error Then Return SetError(2,@error,0)
Local $style = BitOR($res[0], 0x00020000)
If Not $fShadow Then $style = BitAND($style, BitNOT(0x00020000))
$res = DllCall("user32.dll", "ulong", "SetClassLong", "hwnd", $hWnd, "int", -26, "long", $style)
If @error Then Return SetError(3,@error,0)
;~ If $res[0] Then _SendMessage($hWnd, 0x48004000+51, 0, 0)
If $res[0] Then
If BitAND(WinGetState($hWnd), 2)=2 Then
WinSetState($hWnd, "", @SW_HIDE)
WinSetState($hWnd, "", @SW_SHOW)
EndIf
Return 1
EndIf
Return SetError(4,0,0)
EndFunc
funktioniert leider nicht zuminstest nicht auf einer win7 64
Ich glaube, dass das nicht mit Aero funktionier,. auf WinXP geht es jedenfalls. Was passiert, wenn du Aero abschaltest?
Unter Vista x86 funktioniert es jedenfalls auch nicht. (Oder der Schatten ist so schwach, dass ich ihn nicht sehe :D)
Aero ist hier abgeschaltet. UAC auch, und ich bin als Admin angemeldet wenn das von Interesse ist.
Und damit ich dir nicht meine kompletten Daten runterrattern muss, bekommst du ne DxDiag.txt von mir :D+
ich erhalte übrigens @error 0 von der Funktion.
Die Lösung benötigt die aktive Option "zeige Schatten unter Menüs". Die Anzeige unter Vista und höher kann ich nicht testen und hab auch keine Idee, wie man es machen könnte, da es bei auch ja anscheinend nicht geht.
Ihr könnt aber gerne veruschen, das Nachzumachen: http://www.codeproject.com/KB/dialog/Fram…spx?msg=1773460