以下代码据说可是实现,但我没有调试成功,请老大指点一下:
定义com接口
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 t
bp
Flags 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
方便调用的类
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
部分使用例子
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
2014年10月30日 12点10分
6