在win32 application下如何修改应用程序图标?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在win32 application下如何修改应用程序图标?相关的知识,希望对你有一定的参考价值。

我写了个win32 application下的小程序.但不知道如何更改它的icon图标.最好再介绍下在这个win32控制台下如何创建托盘?
如果答得好追加10分!!!
有在win32控制台下直接编程实现的例子吗?

应用程序图标修改器
http://www.renlive.com/Software/Catalog78/2312.html
VC++6.0设计托盘图标程序
http://blogger.org.cn/blog/more.asp?name=%BE%ED%BB%FD%C4%DA%BA%CB&id=3641
SDK下将程序图标放入系统托盘区的代码
http://liyangab.spaces.live.com/blog/cns!5079e2e45220148c!107.entry
创建真彩色的系统托盘图标
http://www.askdev.cn/d/a-2045899-9c65e.html

希望帮得上忙
参考技术A 点右键属性里有一个更改图标

如何在 Win8 C# 应用程序中设置专辑封面?

【中文标题】如何在 Win8 C# 应用程序中设置专辑封面?【英文标题】:How can I set album artwork in a Win8 C# application? 【发布时间】:2013-04-16 05:31:02 【问题描述】:

我希望能够拍摄现有照片并将其设置为专辑插图。

我可以使用GetThumbnailAsync 给我一个缩略图和GetOutputStream 来获取缩略图输出流。不幸的是,它不可写。

如何在 Win8 C# 应用程序中的项目上设置专辑插图(或任何缩略图)?

当前(非工作)代码。当 outStream 被拒绝访问错误刷新时,它会死掉

    FileOpenPicker fileopenpicker = new FileOpenPicker();

    fileopenpicker.FileTypeFilter.Add(".jpg");
    fileopenpicker.FileTypeFilter.Add(".png");

    fileopenpicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;// | PickerLocationId.DocumentsLibrary | PickerLocationId.PicturesLibrary | PickerLocationId.MusicLibrary;

    var singlefileoperation = await fileopenpicker.PickSingleFileAsync();
    var read = await singlefileoperation.OpenAsync(FileAccessMode.Read);

    StorageFile replay = currentlyPlaying;
    TimeSpan pos = ME.Position;
    ME.Stop();

    //curren
    StorageItemThumbnail storageItemThumbnail = await currentlyPlaying.GetThumbnailAsync(ThumbnailMode.SingleItem);




    IOutputStream inputStreamAt = storageItemThumbnail.GetOutputStreamAt(0);
    Stream outStream = inputStreamAt.AsStreamForWrite();

    var inStreamAt = read.GetInputStreamAt(0);
    var inStream = inStreamAt.AsStreamForRead();
    await inStream.CopyToAsync(outStream);
    await outStream.FlushAsync();
    outStream.Dispose();
    inStream.Dispose();
    inStreamAt.Dispose();

【问题讨论】:

***.com/questions/12924390/… 显示当前播放曲目的现有专辑封面:未将专辑封面设置到文件本身中。 您正在使用一些代码?还是您遇到的具体错误? 您从哪里获得艺术品?本地还是在线?发布您正在处理的代码! 您的目标是哪种文件格式?对于 MP3,您必须使用 ID3-Tags,如 here 中所述 【参考方案1】:

TagLib Sharp 应该可以帮助您找到所需的内容。

TagLib.File tagFile = TagLib.File.Create(c:/yourpath/yoursong.mp3);
IPicture newArt = new Picture(c:/yourimagepath/youralbumart.jpg);
tagFile.Tag.Pictures = new IPicture[1] newArt;
tagFile.Save();

Code Source

编辑:更新 TagLib Sharp 库的链接

【讨论】:

绝对不是我想要的。具体来说,我反复指出这需要在 Win8 Metro 应用程序中工作,这意味着没有 TagLib Sharp。 啊,抱歉。我自己研究了一会儿。从外观上看,您最好的选择可能是调整或更新 TagLib Sharp 源代码中的代码。如您所见,他们必须手动将标签信息序列化并附加到文件二进制流中。 Windows Store API 没有这个功能并不奇怪,因为 Core .Net 库似乎也没有。从我对 TagLib Sharp 源的粗略扫描来看,它看起来可以适应更新的 API。然而,这将是一个项目。 是的,这看起来就像我必须走的路。在我重新设计了一些有用的东西后,我会重新回答。 你弄明白了吗?我可以调整库以允许我设置专辑封面。然而,taglib sharp 使用了大量 Windows 应用商店应用程序中不允许使用的 API。【参考方案2】:

刚刚发现了这个使 TagLib Sharp 与 Windows 8+ 应用程序兼容的 GitHub 项目TagLib Sharp Portable。您可以通过 NuGet 将其添加到您的项目中,尽管它仍然是预发布版本。

但是,目前使用包含的StreamFileAbstraction 类存在一个错误。 保存标签或专辑封面时有时会抛出***Exception。 使用自定义的 FileAbstraction 类,它对我很有用。

你可以像原来的TagLib一样使用它:

StorageFile file = [...]
TagLib.File tagFile = TagLib.File.Create(new FileAbstraction(file.Name, (await file.OpenAsync(FileAccessMode.ReadWrite)).AsStream()));

其余的和 JHixson 的回答一样。

自定义 FileAbstraction 类:

public class FileAbstraction : TagLib.File.IFileAbstraction

    public FileAbstraction(string name, Stream stream)
    
        this.Name = name;
        this.ReadStream = stream;
        this.WriteStream = stream;
    

    public void CloseStream(Stream stream)
    
        stream.Flush();
    

    public string Name
    
        get;
        private set;
    

    public Stream ReadStream
    
        get;
        private set;
    

    public Stream WriteStream
    
        get;
        private set;
    

【讨论】:

以上是关于在win32 application下如何修改应用程序图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“%1 不是有效的 Win32 应用程序”?

vc新建工程Win32 Application和Win32 Console Application区别

Win32 Application和Win32 Console Application的区别

Win32 Console Application和cpp 。请问在vc++中写程序,新建Win32 Console Application和新建一个cpp的区

Win32 Application和Win32 Console Application区别

如何在VC++ Win32应用程序中鼠标光标位置打印句子?