正文

使任务栏成为透明窗体2006-02-17 04:27:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/stef/10179.html

分享到:

Option ExplicitPrivate Const GWL_EXSTYLE = (-20)Private Const WS_EX_LAYERED = &H80000Private Const WS_EX_TRANSPARENT = &H20&Private Const LWA_ALPHA = &H2&Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "User32" (ByVal hwnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const ERROR_SUCCESS = 0&Private Const REG_OPTION_NON_VOLATILE = 0    ' Key is preserved when system is rebootedPrivate Const SYNCHRONIZE = &H100000Private Const STANDARD_RIGHTS_ALL = &H1F0000Private Const KEY_QUERY_VALUE = &H1Private Const KEY_SET_VALUE = &H2Private Const KEY_CREATE_SUB_KEY = &H4Private Const KEY_ENUMERATE_SUB_KEYS = &H8Private Const KEY_NOTIFY = &H10Private Const KEY_CREATE_LINK = &H20Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _  KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _  KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As LongPrivate Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long     ' Note that if you declare the lpData parameter as String, you must pass it By Value.Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Function prvGetLevel() As Byte  Dim LnLevel As Byte  Dim LsCommand As String  Dim LnToken As Integer  Dim LsKey As String  Dim LsInput As String    LsCommand = Command()  LsKey = "/translevel:"  LnToken = InStr(1, LsCommand, LsKey, vbTextCompare)  If (LnToken = 0) Then    LsInput = InputBox("Enter transparency level for task bar" & vbCrLf & "1 to 255", , 100)  Else    Dim LnEnd As Integer        LnToken = (LnToken + Len(LsKey))    LsInput = Mid$(LsCommand, LnToken, 3)  End If  If (Trim$(LsInput) = 0) Then    LnLevel = 100  Else    LnLevel = Val(Left$(LsInput, 3))  End If  If (LnLevel > 255) Then LnLevel = 255  If (LnLevel < 50) Then LnLevel = 50  prvGetLevel = LnLevelEnd FunctionPrivate Sub prvMakeTransparent(LhWnd As Long, bLevel As Byte)  Dim lOldStyle As Long  lOldStyle = GetWindowLong(LhWnd, GWL_EXSTYLE)  SetWindowLong LhWnd, GWL_EXSTYLE, lOldStyle Or WS_EX_LAYERED  SetLayeredWindowAttributes LhWnd, 0, bLevel, LWA_ALPHAEnd SubPublic Sub Main()  Dim LhWnd As Long  Dim LnLevel As Byte  LnLevel = prvGetLevel  If (InStr(1, Command(), "/silent", vbTextCompare) = 0) Then  '  If SetAutoStart(LnLevel) Then  '    MsgBox "TransTaskBar will be loaded when OS starts.", vbOKOnly Or vbInformation  '  End If  Else  End If  LhWnd = FindWindow("Shell_TrayWnd", vbNullString)  If (LhWnd <> 0) Then    prvMakeTransparent LhWnd, LnLevel  End IfEnd SubPublic Function SetAutoStart(nLevel As Byte) As Boolean  Dim nRet As Long  Dim hKey As Long  Dim nResult As Long  Dim LsFullPath As String    With App    LsFullPath = App.Path & "\" & App.EXEName & ".exe"  End With  If (InStr(1, LsFullPath, " ") > 0) Then    LsFullPath = """" & LsFullPath & """"  End If  LsFullPath = LsFullPath & " /silent /TransLevel:" & CStr(nLevel)  ' Open (or create and open) key  nRet = RegCreateKeyEx(&H80000001, "Software\Microsoft\Windows\CurrentVersion\Run", 0&, vbNullString, _    REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, ByVal 0&, hKey, nResult)  If nRet = ERROR_SUCCESS Then  ' Write new value to registry    nRet = RegSetValueEx(hKey, App.EXEName, 0&, 1&, ByVal LsFullPath, Len(LsFullPath))    Call RegCloseKey(hKey)  End If  SetAutoStart = (nRet = ERROR_SUCCESS)End Function

阅读(2993) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册