Включить рабочий стол (панель инструментов Windows) программно

Я пытаюсь программно включить рабочий стол, который я написал, используя это из проекта кода . Десктоп работает нормально, и я исправил проблему с интерфейсом IStream, которая не позволяет панели инструментов сохранять свое состояние. Но я не могу понять, как «включить его» с помощью кода.

Я пытался найти решение в этот вопрос, но я не уверен, что делаю это правильно.

Я попытался взять код из этого вопроса:

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("4CF504B0-DE96-11D0-8B3F-00A0C911E8E5")]
public interface IBandSite
{
    [PreserveSig]
    uint AddBand([In, MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite);
    [PreserveSig]
    void RemoveBand(uint dwBandID);
}


private uint AddDeskbandToTray(Guid Deskband)
{
    Guid IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
    Guid ITrayBand = new Guid("{F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934}");   
    Type TrayBandSiteService = Type.GetTypeFromCLSID(ITrayBand, true);
    IBandSite BandSite = Activator.CreateInstance(TrayBandSiteService) as IBandSite;
    object DeskbandObject = CoCreateInstance(Deskband, null, CLSCTX.CLSCTX_INPROC_SERVER, IUnknown);
    return BandSite.AddBand(DeskbandObject);
}

Но не смог найти, как вызвать «CoCreateInstance» или какие «использования» мне следует использовать. Я посмотрел на pinvoke.net и попытался добавить следующий интерфейс и перечисление:

[DllImport("ole32.dll", ExactSpelling = true, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
static extern object CoCreateInstance(
   [In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
   [MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter,
   CLSCTX dwClsContext,
   [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);

[Flags]
enum CLSCTX : uint
{
    CLSCTX_INPROC_SERVER = 0x1,
    CLSCTX_INPROC_HANDLER = 0x2,
    CLSCTX_LOCAL_SERVER = 0x4,
    CLSCTX_INPROC_SERVER16 = 0x8,
    CLSCTX_REMOTE_SERVER = 0x10,
    CLSCTX_INPROC_HANDLER16 = 0x20,
    CLSCTX_RESERVED1 = 0x40,
    CLSCTX_RESERVED2 = 0x80,
    CLSCTX_RESERVED3 = 0x100,
    CLSCTX_RESERVED4 = 0x200,
    CLSCTX_NO_CODE_DOWNLOAD = 0x400,
    CLSCTX_RESERVED5 = 0x800,
    CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
    CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
    CLSCTX_NO_FAILURE_LOG = 0x4000,
    CLSCTX_DISABLE_AAA = 0x8000,
    CLSCTX_ENABLE_AAA = 0x10000,
    CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
    CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
    CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
    CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER
}

... что делает код правильным, но когда я вызываю метод AddDeskBandToTray с помощью guid моей панели инструментов, ничего не происходит.

Среда: XP SP3 с IE7 на vmware, .net 3.5

До сих пор я только когда-либо делал С# в ситуации с asp.net, поэтому я немного новичок во всех этих оболочках. Может кто-нибудь указать мне в правильном направлении?


person simon    schedule 28.02.2011    source источник
comment
Вы нашли какое-нибудь решение для этого? Я застрял в той же ситуации и был бы очень признателен за помощь! Спасибо   -  person    schedule 04.09.2011
comment
Как сказал @stakx, но, к вашему сведению, нет, я этого не делал.   -  person simon    schedule 04.09.2011