首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式添加DeskBand时出错

以编程方式添加DeskBand时出错
EN

Stack Overflow用户
提问于 2014-02-10 22:46:45
回答 1查看 504关注 0票数 3

我正在尝试使用以下代码以编程方式将DeskBand对象添加到系统托盘中:

代码语言:javascript
复制
[ComImport, Guid("6D67E846-5B9C-4db8-9CBC-DDE12F4254F1"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITrayDeskband
{
    [PreserveSig]
    int ShowDeskBand([In, MarshalAs(UnmanagedType.Struct)] ref Guid clsid);
    [PreserveSig]
    int HideDeskBand([In, MarshalAs(UnmanagedType.Struct)] ref Guid clsid);
    [PreserveSig]
    int IsDeskBandShown([In, MarshalAs(UnmanagedType.Struct)] ref Guid clsid);
    [PreserveSig]
    int DeskBandRegistrationChanged();
} 

private void ShowDeskBand()
{
    ITrayDeskband obj = null;
    Type trayDeskbandType = System.Type.GetTypeFromCLSID(new Guid("E6442437-6C68-4f52-94DD-2CFED267EFB9"));
    try
    {
        Guid deskbandGuid = new Guid("FE0829F8-EDFA-46B6-87E0-636C8D953E33"); // My Deskband | TestToolbar

        obj = (ITrayDeskband)Activator.CreateInstance(trayDeskbandType);
        obj.DeskBandRegistrationChanged();

        int hr = obj.ShowDeskBand(ref deskbandGuid);

        if (hr != 0)
        {
            throw new Exception("Error while trying to show deskband: " + hr);
        }

        obj.DeskBandRegistrationChanged();
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
    finally
    {
        if (obj != null && Marshal.IsComObject(obj))
            Marshal.ReleaseComObject(obj);
    }
}

来源:http://www.pinvoke.net/default.aspx/Interfaces/ITrayDeskband.html

我的DeskBand对象是通过示例中的"BandObjectsLib“创建的:http://www.codeproject.com/Articles/14141/Band-Objects-NET-2-0-Redux

它看起来是这样的:

代码语言:javascript
复制
[Guid("FE0829F8-EDFA-46B6-87E0-636C8D953E33")]
[BandObject("TestToolbar", BandObjectStyle.Horizontal | BandObjectStyle.TaskbarToolBar, HelpText = "Testing this toolbar")]
public class TestToolbar : BandObject
{
    public TestToolbar()
    {
        ProgressBar pb = new ProgressBar();
        pb.Maximum = 100;
        pb.Minimum = 0;
        pb.Value = 50;

        this.Controls.AddRange(new System.Windows.Forms.Control[] { pb });
    }
}

但是,当尝试添加DeskBand对象时,我得到的所有异常都告诉我错误代码:-2147467259此错误代码转换为0x80004005,根据MSDN,这是一个E_FAIL:http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137.aspx

我基本上被困在这里,因为老实说这不是我的专业领域。我希望有一个更有经验的人可以帮助我?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-11-27 07:06:21

你必须注册你的DLL (安装你的MSI或者使用regasm)才能让你的代码工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21680237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档