Hello I am trying to pass the calls of ITaskbarList meditating CoCreateInstance + DispCallFunc etc etc, a bit for learning a bit more to not use the tlb, but apparently I have not been able to start I try to make some calls but I only get errors.
Will my statements be correct?
Private Const SetProgressValue As Long = 1
Private Const SetProgressState As Long = 2
Code:Option Explicit Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, ID As Any) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long) Private Declare Function CoCreateInstance Lib "ole32" (ByVal rclsid As Long, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, ByVal riid As Long, ByRef ppv As Long) As Long Private Declare Function DispCallFunc Lib "oleaut32" (ByVal pvInstance As Long, ByVal oVft As Long, ByVal lCc As Long, ByVal vtReturn As VbVarType, ByVal cActuals As Long, prgVt As Any, prgpVarg As Any, pvargResult As Variant) As Long Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Const CLSID_TaskbarList As String = "{56FDF344-FD6D-11d0-958A-006097C9A090}" Private Const IID_ITaskbarList2 As String = "{602D4995-B13A-429b-A66E-1935E44F4317}" Private Const IID_ITaskbarList3 As String = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}" Private Const CLSID_TaskbarList3 As String = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}" Private Const CLSID_TaskbarList4 As String = "{C43DC798-95D1-4BEA-9030-BB99E2983A1A}" Private Const CLSCTX_INPROC_SERVER As Long = 1 Private Const CC_STDCALL As Long = &H4& Private Const SetProgressValue As Long = 1 Private Const SetProgressState As Long = 2 Private Const TBPF_NORMAL As Long = 2 Private Const crProgressMax As Currency = 100 Private crProgress As Currency Public Sub TEST() Dim IID As GUID Dim CLSID As GUID Dim rc As Long Dim iTaskBarVB2 As Long rc = CLSIDFromString(StrPtr(CLSID_TaskbarList), CLSID) rc = CLSIDFromString(StrPtr(CLSID_TaskbarList3), IID) rc = CoCreateInstance(VarPtr(CLSID), 0&, CLSCTX_INPROC_SERVER, VarPtr(IID), iTaskBarVB2) Call DispCallByVtbl(iTaskBarVB2, SetProgressState, Form1.hWnd, TBPF_NORMAL) crProgress = 50 Call DispCallByVtbl(iTaskBarVB2, SetProgressValue, Form1.hWnd, crProgress, crProgressMax) End Sub Private Function DispCallByVtbl(pUnk As Long, ByVal lIndex As Long, ParamArray A() As Variant) As Variant Dim lIdx As Long Dim vParam() As Variant Dim vType(0 To 63) As Integer Dim vPtr(0 To 63) As Long Dim hResult As Long vParam = A For lIdx = 0 To UBound(vParam) vType(lIdx) = VarType(vParam(lIdx)) vPtr(lIdx) = VarPtr(vParam(lIdx)) Next hResult = DispCallFunc(pUnk, lIndex * 4, CC_STDCALL, vbLong, lIdx, vType(0), vPtr(0), DispCallByVtbl) If hResult < 0 Then Err.Raise hResult, "DispCallFunc" End If End Function




Reply With Quote