לאחר הרבה ניסיונות מצאתי בס"ד את הדרך ליישם את זה, אני שם את זה פה אם למישהו זה יהיה שימושי בעתיד.
א. הוספתי מחלקת עזר שתייצר ממשקי COM כדלהלן:
public static partial class ComActivator
{
[LibraryImport("ole32")]
private static partial int CoCreateInstance(
ref Guid clsid,
nint pUnkOuter,
int dwClsContext,
ref Guid iid,
[MarshalAs(UnmanagedType.Interface)] out object pObj
);
public static TInterface ActivateClass<TInterface>(Guid clsid, Guid iid)
{
Debug.Assert(iid == typeof(TInterface).GUID);
var hResult = CoCreateInstance(ref clsid, default, 1, ref iid, out var obj);
if (hResult < 0)
{
Marshal.ThrowExceptionForHR(hResult);
}
return (TInterface)obj;
}
}
ב. למחלקה ITaskbarList3 הוספתי את התכונה GeneratedComInterface
ג. ככה אני מקבל את האובייקט:
var clsid = Guid.Parse("56FDF344-FD6D-11D0-958A-006097C9A090"); // TaskBarList
var iid = Guid.Parse("EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF"); // ITaskBarList3
var taskbar = ComActivator.ActivateClass<ITaskbarList3>(clsid, iid);
קישור שעזר לי: https://learn.microsoft.com/en-us/dotnet/standard/native-interop/tutorial-comwrappers
נ.ב. מצאתי עוד פתרון עם ComWrappers אבל הפתרון הראשון עובד מצויין אז השתמשתי בו.