📅  最后修改于: 2023-12-03 15:39:35.434000             🧑  作者: Mango
快捷方式图标是用于表示计算机上快捷方式的图标。快捷方式图标既可以是系统内置的图标,也可以是用户自定义的图标。
操作系统通常会内置一些常用的图标,如文件夹、文档、音频、视频等。程序员可以使用系统提供的API以及系统内置图标来创建自己的快捷方式。
Windows系统内置了一套图标资源,位于以下路径:
%SystemRoot%\system32\imageres.dll
这些图标可以通过以下API来获取:
SHGetStockIconInfo(SIID_APPLICATION, SHGSI_ICON, &sii);
其中,SIID_APPLICATION
表示获取应用程序快捷方式的图标,SHGSI_ICON
表示获取图标句柄。
macOS系统内置了一套图标资源,位于以下路径:
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
这些图标可以通过以下API来获取:
NSImage *image = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)];
其中,kGenericFolderIcon
表示获取文件夹的图标,NSFileTypeForHFSTypeCode
将传入的文件类型码转换为文件类型。
Linux系统内置了一套图标资源,位于以下路径:
/usr/share/icons/
这些图标可以使用GTK+的API来获取:
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file("/usr/share/icons/hicolor/16x16/apps/gnome-panel-launcher.png", NULL);
其中,gnome-panel-launcher.png
表示获取应用程序快捷方式的图标,16x16
表示图标的大小,/usr/share/icons/hicolor/
表示默认的图标路径。
程序员还可以为自己的应用程序创建自定义图标。在Windows系统下,可以使用Visual Studio自带的图标编辑器,或使用其他第三方图标编辑器。在macOS系统下,可以使用Xcode自带的图标编辑器Icon Composer。在Linux系统下,可以使用Inkscape等矢量图形编辑器来创建图标。
无论是系统内置图标还是用户自定义图标,都可以使用以下API将其设置为快捷方式的图标:
CoInitialize(NULL); // 初始化COM组件
IShellLink *psl;
HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if(SUCCEEDED(hr)) {
IPersistFile *ppf;
hr = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(SUCCEEDED(hr)) {
WORD wsz[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, L".\\demo.lnk", -1, wsz, MAX_PATH);
hr = ppf->Load(wsz, STGM_READWRITE);
if(SUCCEEDED(hr)) {
psl->SetIconLocation(L"C:\\myicon.ico", 0); // 设置图标
ppf->Save(NULL, TRUE);
}
ppf->Release();
}
psl->Release();
}
CoUninitialize(); // 终止COM组件
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
NSString *appPath = [[NSBundle mainBundle] bundlePath];
NSString *appIconPath = [appPath stringByAppendingPathComponent:@"Contents/Resources/MyApp.icns"];
NSURL *appURL = [NSURL fileURLWithPath:appPath];
[workspace setIcon:[[NSImage alloc] initWithContentsOfFile:appIconPath] forFile:[appURL path] options:0];
GError* error = NULL;
GFile* file = g_file_new_for_path("/usr/share/applications/myapp.desktop");
g_file_replace_contents(file, "[Desktop Entry]\nName=MyApp\nIcon=myapp\nType=Application\nExec=myapp\n", -1, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, &error); // 将myapp设置为图标名称
if (error != NULL) {
g_error_free(error);
return -1;
}
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file("/usr/share/icons/hicolor/48x48/apps/inkscape.png", NULL); // 用inkscape来给myapp设置图标
if (pixbuf != NULL) {
gboolean result = gdk_pixbuf_save(pixbuf, "/usr/share/icons/hicolor/48x48/apps/myapp.png", "png", &error, NULL);
g_object_unref(pixbuf);
if (!result) {
if (error != NULL) {
g_error_free(error);
}
return -1;
}
}
快捷方式图标是非常重要的一部分,它可以让用户方便地找到并打开应用程序。程序员可以根据系统内置图标或者用户自定义图标的需要来设置快捷方式的图标,并使用API将其应用到快捷方式中。无论哪种操作系统,都有一套适合的API或工具来完成这个任务。