I did find in MSDN that shell32 are using three (four) different progress interfaces (derived from the first one) for same things.
Here are they listed as code snippets
** The fourth one is regarding to MSDN not implemented by applications.Code:'<---From here is from Fafalone's mIID.bas module Public Sub DEFINE_UUID(name As UUID, L As Long, w1 As Integer, w2 As Integer, B0 As Byte, b1 As Byte, b2 As Byte, B3 As Byte, b4 As Byte, b5 As Byte, b6 As Byte, b7 As Byte) With name .Data1 = L: .Data2 = w1: .Data3 = w2: .Data4(0) = B0: .Data4(1) = b1: .Data4(2) = b2: .Data4(3) = B3: .Data4(4) = b4: .Data4(5) = b5: .Data4(6) = b6: .Data4(7) = b7 End With End Sub Public Function IID_IProgressDialog() As UUID '{EBBC7C04-315E-11d2-B62F-006097DF5BD4} Static IID As UUID If (IID.Data1 = 0&) Then Call DEFINE_UUID(IID, &HEBBC7C04, CInt(&H315E), CInt(&H11D2), &HB6, &H2F, &H0, &H60, &H97, &HDF, &H5B, &HD4) IID_IProgressDialog = IID End Function '---> End here Public Const sCLSID_ProgressDialog As String = "{F8383852-FCD3-11d1-A6B9-006097DF5BD4}" Public Declare Function CoCreateInstance Lib "ole32.dll" (ByRef rclsid As Any, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, riid As Any, ByRef ppv As Any) As Long Public Declare Function GuidFromStringA Lib "shell32.dll" Alias "#703" (ByVal pszGUID As String, ByRef pguid As GUID) As Long Public Declare Function GuidFromStringW Lib "shell32.dll" Alias "#704" (ByVal pszGUID As Long, ByRef pguid As GUID) As Long Public Function ShCreateIProgressDialog(pIPD As IProgressDialog) As Long Static CLSID_ProgressDialog As GUID Dim hr As Long hr = GuidFromStringW(StrPtr(sCLSID_ProgressDialog), CLSID_ProgressDialog) '<-- This always returns success if you got correct A or W version hr = CoCreateInstance(CLSID_ProgressDialog, 0, CLSCTX_INPROC_SERVER, IID_IProgressDialog, pIPD) If hr = S_OK Then ShCreateIProgressDialog = S_OK Else ShCreateIProgressDialog = hr End If End Function Public Function ShCreateIOperationsProgressDialog(pIOPD As IOperationsProgressDialog) As Long Dim hr As Long Dim pIPD As IProgressDialog hr = ShCreateIProgressDialog(pIPD) If hr = S_OK Then Set pIOPD = pIPD ShCreateIOperationsProgressDialog = S_OK Else ShCreateIOperationsProgressDialog = hr End If Set pIPD = Nothing End Function Public Function ShCreateIActionProgressDialog(pIAPD As IActionProgressDialog) As Long Dim hr As Long Dim pIPD As IProgressDialog hr = ShCreateIProgressDialog(pIPD) If hr = S_OK Then Set pIAPD = pIPD ShCreateIActionProgressDialog = S_OK Else ShCreateIActionProgressDialog = hr End If Set pIPD = Nothing End Function Public Function ShCreateIActionProgress(pIAP As IActionProgress) As Long '** Dim hr As Long Dim pIPD As IProgressDialog hr = ShCreateIProgressDialog(pIPD) If hr = S_OK Then Set pIAP = pIPD ShCreateIActionProgress = S_OK Else ShCreateIActionProgress = hr End If Set pIPD = Nothing End Function
https://learn.microsoft.com/en-us/wi...actionprogress




Reply With Quote