定义com接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
Imports System.Runtime.InteropServices Namespace Windows7DesktopIntegration <StructLayout(LayoutKind.Sequential)> _ Public Structure RECT Public left As Integer Public top As Integer Public right As Integer Public bottom As Integer Public Sub New(left As Integer, top As Integer, right As Integer, bottom As Integer) Me.left = left Me.top = top Me.right = right Me.bottom = bottom End Sub End Structure Public Enum TBPFLAG TBPF_NOPROGRESS = 0 TBPF_INDETERMINATE = &H1 TBPF_NORMAL = &H2 TBPF_ERROR = &H4 TBPF_PAUSED = &H8 End Enum Public Enum TBATFLAG TBATF_USEMDITHUMBNAIL = &H1 TBATF_USEMDILIVEPREVIEW = &H2 End Enum Public Enum THBMASK THB_BITMAP = &H1 THB_ICON = &H2 THB_TOOLTIP = &H4 THB_FLAGS = &H8 End Enum Public Enum THBFLAGS THBF_ENABLED = 0 THBF_DISABLED = &H1 THBF_DISMISSONCLICK = &H2 THBF_NOBACKGROUND = &H4 THBF_HIDDEN = &H8 End Enum <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Public Structure THUMBBUTTON <MarshalAs(UnmanagedType.U4)> _ Public dwMask As THBMASK Public iId As UInteger Public iBitmap As UInteger Public hIcon As IntPtr <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _ Public szTip As String <MarshalAs(UnmanagedType.U4)> _ Public dwFlags As THBFLAGS End Structure <ComImportAttribute()> _ <GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")> _ <InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _ Public Interface ITaskbarList3 ' ITaskbarList <PreserveSig()> _ Sub HrInit() <PreserveSig()> _ Sub AddTab(hwnd As IntPtr) <PreserveSig()> _ Sub DeleteTab(hwnd As IntPtr) <PreserveSig()> _ Sub ActivateTab(hwnd As IntPtr) <PreserveSig()> _ Sub SetActiveAlt(hwnd As IntPtr) ' ITaskbarList2 <PreserveSig()> _ Sub MarkFullscreenWindow(hwnd As IntPtr, <MarshalAs(UnmanagedType.Bool)> fFullscreen As Boolean) ' ITaskbarList3 Sub SetProgressValue(<[In]()> ByVal hwnd As IntPtr, <[In]()> ByVal ullCompleted As UInt64, <[In]()> ByVal ullTotal As UInt64) Sub SetProgressState(<[In]()> ByVal hwnd As IntPtr, <[In]()> ByVal tbpFlags As TBPFLAG) Sub RegisterTab(hwndTab As IntPtr, hwndMDI As IntPtr) Sub UnregisterTab(hwndTab As IntPtr) Sub SetTabOrder(hwndTab As IntPtr, hwndInsertBefore As IntPtr) Sub SetTabActive(hwndTab As IntPtr, hwndMDI As IntPtr, tbatFlags As TBATFLAG) Sub ThumbBarAddButtons(ByVal hwnd As IntPtr, ByVal cButtons As UInteger, <MarshalAs(UnmanagedType.LPArray)> pButtons As THUMBBUTTON()) Sub ThumbBarUpdateButtons(hwnd As IntPtr, cButtons As UInteger, <MarshalAs(UnmanagedType.LPArray)> pButtons As THUMBBUTTON()) Sub ThumbBarSetImageList(hwnd As IntPtr, himl As IntPtr) Sub SetOverlayIcon(hwnd As IntPtr, hIcon As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> pszDescription As String) Sub SetThumbnailTooltip(hwnd As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> pszTip As String) Sub SetThumbnailClip(hwnd As IntPtr, ByRef prcClip As RECT) End Interface <GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")> _ <ClassInterfaceAttribute(ClassInterfaceType.None)> _ <ComImportAttribute()> _ Public Class CTaskbarList End Class End Namespace |
方便调用的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Imports 工程名.Windows7DesktopIntegration Public Class Windows7taskbar Private Shared ReadOnly [syncLock] As New Object() Private Shared w7tb As ITaskbarList3 Private Shared bInitialize As Boolean = False Public Enum Windows7TaskbarState NOPROGRESS = TBPFLAG.TBPF_NOPROGRESS INDETERMINATE = TBPFLAG.TBPF_INDETERMINATE NORMAL = TBPFLAG.TBPF_NORMAL [ERROR] = TBPFLAG.TBPF_ERROR PAUSED = TBPFLAG.TBPF_PAUSED End Enum ''' <summary> ''' 初始化Windows7taskbar ''' </summary> ''' <remarks></remarks> Public Shared Sub Initialization() If Not bInitialize Then If System.Environment.OSVersion.Version >= New Version(6, 1) Then Try If w7tb Is Nothing Then SyncLock [syncLock] w7tb = CType(New CTaskbarList, ITaskbarList3) End SyncLock bInitialize = True End If Catch ex As Exception bInitialize = False addLog(ex.Message) End Try End If End If End Sub Public Shared Sub SetWindows7Progress(ByVal hwnd As IntPtr, ByVal iNow As Integer, ByVal iMax As Integer) If bInitialize Then w7tb.SetProgressValue(hwnd, iNow, iMax) End If End Sub Public Shared Sub ResetWindows7Progress(ByVal hwnd As IntPtr) If bInitialize Then w7tb.SetProgressState(hwnd, TBPFLAG.TBPF_NOPROGRESS) End If End Sub Public Shared Sub SetWindows7ProgressState(ByVal hwnd As IntPtr, ByVal state As Windows7TaskbarState) If bInitialize Then w7tb.SetProgressState(hwnd, state) End If End Sub Public Shared Sub AddWindows7ThumbBarButtons(ByVal hwnd As IntPtr, ByVal itbL As Integer, ByVal tb() As THUMBBUTTON) If bInitialize Then w7tb.ThumbBarAddButtons(hwnd, itbL, tb) End If End Sub Public Shared Sub UpdateWindows7ThumbBarButtons(ByVal hwnd As IntPtr, ByVal itbL As Integer, ByVal tb() As THUMBBUTTON) If bInitialize Then w7tb.ThumbBarUpdateButtons(hwnd, itbL, tb) End If End Sub Public Shared Sub SetWindows7OverlayIcon(ByVal hwnd As IntPtr, ByVal icon As IntPtr, ByVal sText As String) If bInitialize Then w7tb.SetOverlayIcon(hwnd, icon, sText) End If End Sub End Class |
部分使用例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
Public Const WM_COMMAND As Integer = &H111 Public Const THBN_CLICKED As Integer = &H1800 Private Sub Form1_HandleCreated(sender As Object, e As EventArgs) Handles MyBase.HandleCreated Windows7taskbar.Initialization() End Sub Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown Dim thbButtons(2) As Windows7DesktopIntegration.THUMBBUTTON thbButtons(0).dwMask = Windows7DesktopIntegration.THBMASK.THB_FLAGS Or Windows7DesktopIntegration.THBMASK.THB_ICON Or Windows7DesktopIntegration.THBMASK.THB_TOOLTIP thbButtons(0).iId = 500 thbButtons(0).hIcon = My.Resources.play.Handle thbButtons(0).szTip = "Go" thbButtons(0).dwFlags = Windows7DesktopIntegration.THBFLAGS.THBF_ENABLED '略 End Sub Protected Overrides Sub WndProc(ByRef m As Windows.Forms.Message) If m.Msg = WM_COMMAND Then Dim wparam As UInt64 = m.WParam.ToInt64 Dim wparam32 As UInt32 = wparam And &HFFFFFFFFUI 'Clear top 32 bits If (wparam32 >> 16 = THBN_CLICKED) Then Dim id As UInteger = wparam32 And &HFFFF Select Case id Case 500 ThumbButtonId500() Case 501 ThumbButtonId501() Case 502 ThumbButtonId502() Case Else Exit Select End Select End If End If MyBase.WndProc(m) End Sub Private Sub ThumbButtonId500() If BackgroundWorker1.IsBusy Or BackgroundWorker2.IsBusy Then bWaitCancelAsync = False Windows7taskbar.SetWindows7ProgressState(Me.Handle, Windows7taskbar.Windows7TaskbarState.NORMAL) Windows7taskbar.SetWindows7OverlayIcon(Me.Handle, My.Resources.play2.Handle, "Go") End If End Sub Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged If 0 = e.ProgressPercentage Then Windows7taskbar.SetWindows7ProgressState(Me.Handle, Windows7taskbar.Windows7TaskbarState.INDETERMINATE) Else Windows7taskbar.SetWindows7ProgressState(Me.Handle, Windows7taskbar.Windows7TaskbarState.NORMAL) Windows7taskbar.SetWindows7Progress(Me.Handle, e.ProgressPercentage, 100) End If End Sub |