我正试图在任务栏中为我的应用程序实现一个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号线上。它说The type or namespace 'DESKBANDINFO是找不到的。(您是缺少了使用指令还是程序集引用?)
我如何实现这一点-您有任何良好的文档DeskBand (见下图)的DeskBand 7+?

发布于 2014-05-04 13:07:56
DESKBAND信息是一个结构化文档的这里。您可以在C#上找到pinvoke.net翻译。
[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;
}桌面API 文档清楚地声明它是一个不受欢迎的API。上面写着:
重要的你应该在新的开发中使用缩略图工具栏来代替桌面带,这在Windows 7中是不受支持的。
换句话说,您几乎肯定不应该使用桌面API来解决您的问题。
尽管如此,如果您想学习如何使用桌面API,请在C++中查找例如代码。不要将搜索限制在C#上。希望在C++中找到好的示例,但在C#中找不到。
https://stackoverflow.com/questions/23456505
复制相似问题