C# 无法完成IDeskBand2接口的实现

C# 无法完成IDeskBand2接口的实现,c#,.net,winforms,com,C#,.net,Winforms,Com,我试图在我的应用程序的任务栏中实现一个DeskBand,我已经检查了,但它非常稀疏。它没有解释如何实现IDeskBand2接口 我在网上几乎找不到这方面的信息,而且我找到的东西也不起作用。直到今天,当我偶然发现这个网站时,我发现CodeProject上看起来很有前途的代码只不过是编译器时间错误的喷泉 到目前为止,我得到的是: class COMInterop { [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsDual

我试图在我的应用程序的任务栏中实现一个DeskBand,我已经检查了,但它非常稀疏。它没有解释如何实现IDeskBand2接口

我在网上几乎找不到这方面的信息,而且我找到的东西也不起作用。直到今天,当我偶然发现这个网站时,我发现CodeProject上看起来很有前途的代码只不过是编译器时间错误的喷泉

到目前为止,我得到的是:

class COMInterop
{
    [ComImport]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("79D16DE4-ABEE-4021-8D9D-9169B261D657")]

    public interface IDeskBand2
    {
        void GetWindow(out System.IntPtr phwnd);
        void ContextSensitiveHelp([In] bool fEnterMode);
        void ShowDW([In] bool fShow);
        void CloseDW([In] UInt32 dwReserved);
        void ResizeBorderDW(IntPtr prcBorder, [In, MarshalAs(UnmanagedType.IUnknown)] Object punkToolbarSite, bool fReserved);

        void GetBandInfo(UInt32 dwBandID, UInt32 dwViewMode, ref DESKBANDINFO pdbi);
        bool CanRenderComposited();
        bool GetCompositionState();
        void SetCompositionState(bool fCompositionEnabled);
    }
}
它位于名为
COMInterop.cs
的类文件中

我现在的问题在24号线上。它说,
找不到类型或名称空间的DESKBANDINFO
。(是否缺少using指令或程序集引用?)

我如何实现这一点?您是否有适用于Windows 7+的DeskBand(见下图)的好的文档


DESKBAND
info是一个文档化的结构。你可以在网上找到C#翻译

deskband API明确指出它是一个不推荐使用的API。它说:

重要信息在新开发中,您应该使用缩略图工具栏来代替桌面条带,而桌面条带在Windows 7中不受支持

换句话说,几乎可以肯定的是,您不应该解决deskband API的问题


,如果你想学习如何使用TeSkBaseAPI,在C++中查找示例代码。不要将搜索限制为C#。希望在C++中找到好的例子,而不是C语言中的例子。

DESKBAND
info是一个文档化的结构。你可以在网上找到C#翻译

deskband API明确指出它是一个不推荐使用的API。它说:

重要信息在新开发中,您应该使用缩略图工具栏来代替桌面条带,而桌面条带在Windows 7中不受支持

换句话说,几乎可以肯定的是,您不应该解决deskband API的问题


,如果你想学习如何使用TeSkBaseAPI,在C++中查找示例代码。不要将搜索限制为C#。希望在C++中找到好的例子,而不是C语言中的例子。 也许这能帮到你?谢谢@pasty,但现在它说找不到DBIM。我正在尝试在线搜索以了解原因。您可以在P/Invoke网站上搜索所需的结构…不要在.NET中编写DeskBand。DeskBand在Explorer.exe进程内运行,因此出于同样的原因不应在.NET中编写。也许这可以帮助您?谢谢@pasty,但现在它说找不到DBIM。我正在尝试在线搜索以了解原因。您可以在P/Invoke网站上搜索所需的结构…不要在.NET中编写DeskBand。DeskBand在Explorer.exe进程内运行,因此出于同样的原因,不应在.NET中写入。我使用的是Windows 8.1,在任务栏上,Microsoft在任务栏上实现了一个名为“触摸键盘”的DeskBand-单击它,触摸键盘将打开。如果它被弃用了,那么我想他们不会很快就把它扔掉。另外,我不喜欢缩略图工具栏,它们与我想做的完全相反。我只是告诉你官方的路线是什么。很明显,你可以随心所欲谢谢你的回答@David,这只是一个我一直想弄明白的私人项目。我真的需要完成它。即使将来可能不起作用:)所有这些错误现在都消失了!我仍然不确定要调用哪些方法才能真正让DeskBand显示在任务栏上,以及在什么时候调用这些方法。好啊再次感谢您的帮助:-)我正在使用Windows 8.1,在任务栏上,Microsoft在任务栏上实现了一个名为触摸键盘的DeskBand-单击它,触摸键盘将打开。如果它被弃用了,那么我想他们不会很快就把它扔掉。另外,我不喜欢缩略图工具栏,它们与我想做的完全相反。我只是告诉你官方的路线是什么。很明显,你可以随心所欲谢谢你的回答@David,这只是一个我一直想弄明白的私人项目。我真的需要完成它。即使将来可能不起作用:)所有这些错误现在都消失了!我仍然不确定要调用哪些方法才能真正让DeskBand显示在任务栏上,以及在什么时候调用这些方法。好啊再次感谢您的帮助:-)

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;

    public POINT(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }

    public POINT(System.Drawing.Point pt) : this(pt.X, pt.Y) { }

    public static implicit operator System.Drawing.Point(POINT p)
    {
        return new System.Drawing.Point(p.X, p.Y);
    }

    public static implicit operator POINT(System.Drawing.Point p)
    {
        return new POINT(p.X, p.Y);
    }
}

[StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct DESKBANDINFO {
    public uint dwMask;
    public Point ptMinSize;
    public Point ptMaxSize;
    public Point ptIntegral;
    public Point ptActual;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
    public String wszTitle;
    public uint dwModeFlags;
    public Int32 crBkgnd; 
}