Hallöchen,
Ausgehend von dem Thread hierhab ich mal meiner Langeweile freien lauf gelassen und das hier gezaubert:
Mit Strg+Mausrad könnt ihr nun die Transparenz des aktuellen Fensters ändern. Ich persönlcih finde das sehr praktisch wenn ich zb. etwas mit AutoIt bastel und im Hintergrund ein Spiel offen habe. So brauch ich nicht immer fenster zu wechseln, sondern einfach mal "durchgucken"
Steuerung / Tastenkombi's
Spoiler anzeigen
Strg + Mausrad = Ändern der Fenstertransparenz
Strg + Shift + Mausrad = Ändern der Transparenzschritte ( je höher dieser wert, desto schneller wird das Fenster mit Strg + Mausrad transparent )
Strg + Mausradklick = Zurücksetzen der Transparenz für alle Fenster
ESC = Zurücksetzen der Transparenz und beenden des skripts.
PAUSE = Wechselt zwischen AN und AUS. So kann man das Skript auch laufen lassen, wenn man STRG+Mausrad mal für seine ursprünglichen Zwecke benutzen will (Textgröße ändern)
Include gibts hier (oder neuerdings auch im Anhang)
Spoiler anzeigen
#include <MouseSetOnEvent_UDF.au3>
#include <Misc.au3>
_Singleton(@ScriptName)
HotKeySet("{ESC}","_kill")
HotKeySet("{PAUSE}","_toogle")
$aDll = DllOpen("user32.dll")
$aWin = @ScriptName
$aVal = 15
$go = True
While $go
;Setzt den Fenster-Handle neu, falls ein neues Fenster aktiv ist.
If $aWin <> WinGetTitle("") Then
$aWin = WinGetTitle("")
EndIf
;Solange Strg gedrückt ist, werden die Events zugeordnet
While _IsPressed(11, $aDll)
ToolTip(WinGetTrans($aWin)) ; Zeigt die Transparenz des aktuellen Fensters
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_trans", "up", "")
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_trans", "down", "")
If WinGetTrans($aWin) = -1 Then
WinSetTrans($aWin,"",255)
EndIf
If _IsPressed(04, $aDll) Then
ToolTip("") ;Entfernt Tool- und Traytip (sonst gibts hässliche schwarze Ränder)
TrayTip("","",0)
_RestoreTrans()
EndIf
Sleep(10)
WEnd
;Wenn Strg nicht gedrückt, dann hebe die zuordnungen für die Mausrad events auf.
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "")
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "")
ToolTip("")
Sleep(10)
WEnd
Func _trans($wDir)
If _IsPressed(11, $aDll) Then
Switch $wDir
Case "up"
If _IsPressed(10, $aDll) Then ; Wenn Shift gedrückt gehalten wird, ändere nur die Transparenzschritte
$aVal += 5
If $aVal > 255 Then $aVal = 255
TrayTip($aVal,"Transparenzschritte",1)
Else ; Ansonsten ändere die Transparenz selbst.
$aTrans = WinGetTrans($aWin)
If ($aTrans + $aVal) > 255 OR $aTrans = -1 Then
$aTrans = 255
Else
$aTrans += $aVal
EndIf
WinSetTrans($aWin,"",$aTrans)
EndIf
Case "down"
If _IsPressed(10, $aDll) Then ; Wenn Shift gedrückt gehalten wird, ändere nur die Transparenzschritte
$aVal -= 5
If $aVal < 0 Then $aVal = 0
TrayTip($aVal,"Transparenzschritte",1)
Else ; Ansonsten ändere die Transparenz selbst.
$aTrans = WinGetTrans($aWin)
If ($aTrans - $aVal) < 0 Then
$aTrans = 0
Else
$aTrans -= $aVal
EndIf
WinSetTrans($aWin,"",$aTrans)
EndIf
EndSwitch
EndIf
EndFunc
Func WinGetTrans($sTitle, $sText = "")
;Author: Valik (Autoitscript.com)
Local $hWnd = WinGetHandle($sTitle, $sText)
If Not $hWnd Then Return -1
Local $val = DllStructCreate("int")
Local $aRet = DllCall($aDll, "int", "GetLayeredWindowAttributes", "hwnd", $hWnd, "ulong_ptr", 0, "int_ptr", DllStructGetPtr($val), "ulong_ptr", 0)
If @error Or Not $aRet[0] Then Return -1
Return DllStructGetData($val, 1)
EndFunc
Func _kill()
_RestoreTrans()
DllClose($aDll)
Exit
EndFunc
Func _toogle()
If $go Then
$go = False
TrayTip("Off - Transparency Tool v2","Press PAUSE again to start",1)
Else
$go = True
TrayTip("On - Transparency Tool v2","Press PAUSE again to stop",1)
EndIf
While Not $go
Sleep(100)
WEnd
EndFunc
Func _RestoreTrans() ; Setzt die Transparenz für alle Fenster in einer For-Next schleife auf 255.
;Hiervon ausgeschlossen sind "Program Manager" (XP) und "Start" (VISTA)
ConsoleWrite(@CRLF&"=========================================="&@CRLF)
$WinList = WinList()
For $i = 1 to $WinList[0][0]
If _IsVisible($WinList[$i][1]) Then
If WinGetTitle($WinList[$i][1]) = "Start" Or WinGetTitle($WinList[$i][1]) = "Program Manager" Then
Sleep(10)
Else
ConsoleWrite("HWND: "&$WinList[$i][1] &@CRLF&"Name: "& $WinList[$i][0]&@CRLF&@CRLF)
WinSetTrans($WinList[$i][1],"",255)
EndIf
EndIf
Next
ConsoleWrite(@CRLF&"=========================================="&@CRLF)
EndFunc
Func _IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
EDIT:
- Bugs (hoffentlich) gefixt x 2.
- "XP-ESC-Bug" sollte jetzt behoben sein.
- Transparenz macht definitv nun keine Sprünge mehr. Skript sollte nun nicht mehr abstürzen.
- Beim beenden werden alle Fenster wieder sichbar gemacht.
Transparenzschritte eingefügt. (+ / - tasten)- Transparenzschritte hinzugefügt, STRG+SHIFT+Mausrad
- An/Aus hinzugefügt.
- Strg+Mausradklick setzt die Transparenz für alle Fenster* auf 255
*Ausgenommen sind "Program Manager" unter XP, sowie "Start" unter Vista.