VC中如何获取桌面快捷方式图标并对其操作

作者&投稿:高之 (若有异议请与网页底部的电邮联系)
VC++如何获取桌面上“网络连接快捷方式”的图标~

嗯,系统的一些特殊图标不是你那样获取的,应该是用PIDL定位后去获取,你看一下我的代码
HICON GetIconForCSIDL(int csidl){LPITEMIDLIST pidl = 0;SHGetSpecialFolderLocation(NULL, csidl, &pidl);if (pidl){SHFILEINFO shellInfo;SHGetFileInfo(LPCTSTR(pidl), FILE_ATTRIBUTE_NORMAL,&shellInfo, sizeof(shellInfo),SHGFI_PIDL | SHGFI_ICON);IMalloc *pMalloc;SHGetMalloc(&pMalloc);if(pMalloc){pMalloc->Free(pidl);pMalloc->Release();}return shellInfo.hIcon;}return 0;}void CTestICONDlg::OnOK() {// TODO: Add extra validation hereHICON hIcon = GetIconForCSIDL(CSIDL_NETWORK);CClientDC dc(this);dc.DrawIcon( 0 , 0 , (HICON)hIcon );DestroyIcon( hIcon );}
我测试过~可以绘制出图标~~其它的也类似,你换一下CSIDL_NETWORK,把它换成其它就获取其它图标了

java目前都在游戏和更多里,桌面上只支持wgt小组件 查看原帖>>

快捷方式 属于 平台SDK 中 Windows Shell 的内容。用到了COM。相当麻烦。
我替你查了一下MSDN。

首先因为用到了COM,
你要在你程序启动的时候 调用 CoInitilize(NULL);,在程序退出时调用CoUninitialize();

然后是准备操作,找到你要的快捷方式的路径。用FindFirstFile 和 FindNextFile 找。如果是MFC,可以用CFileFind比较方便。当然,你也可以在代码中给出快捷方式的路径,但这样会使程序不通用。

需要的头文件:<objidl.h>
需要链接的IDL文件: <shobjidl.idl>
之后是查找快捷方式的目标。MSDN 里有这段代码。就用MS 的吧。是一个函数的代码。我给你粘在这个帖子的最后面。你可以把它拷进你代码里。

最后当然是运行.exe 文件了。 用CreateProcess 或 WinExec 都行。

那个函数的代码:

HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath, int iPathBufferSize)
{
HRESULT hres;
IShellLink* psl;
char szGotPath[MAX_PATH];
char szDescription[MAX_PATH];
WIN32_FIND_DATA wfd;

*lpszPath = 0; // assume failure

// Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;

// Get a pointer to the IPersistFile interface.
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);

if (SUCCEEDED(hres))
{
WCHAR wsz[MAX_PATH];

// Ensure that the string is Unicode.
MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz, MAX_PATH);

// TODO: Check return value from MultiByteWideChar to ensure
success.

// Load the shortcut.
hres = ppf->Load(wsz, STGM_READ);

if (SUCCEEDED(hres))
{
// Resolve the link.
hres = psl->Resolve(hwnd, 0);

if (SUCCEEDED(hres))
{
// Get the path to the link target.
hres = psl->GetPath(szGotPath,
MAX_PATH,
(WIN32_FIND_DATA*)&wfd,
SLGP_SHORTPATH);

if (SUCCEEDED(hres))
{
// Get the description of the target.
hres = psl->GetDescription(szDescription, MAX_PATH);

if (SUCCEEDED(hres))
{
hres = StringCbCopy(lpszPath, iPathBufferSize,
szGotPath);
if (SUCCEEDED(hres))
{
// Handle success
}
else
// application-defined function
HandleErr(hres);
}
}
}
}

// Release the pointer to the IPersistFile interface.
ppf->Release();
}

// Release the pointer to the IShellLink interface.
psl->Release();
}
return hres;
}


右键 发送到桌面快捷方式没有了 怎么弄出来?
当你右击文件~发送到,没有看到显示“桌面快捷方式”(如图),造成原因可能是用了优化软件作了优化或者注册表被莫名修改等,这个可以自己动手重新创建一个即可!方法如下:1、首先打开“资源管理器”或“我的电脑”,然后在地址栏内输入(如图):C:\\Users\\用户名\\AppData\\Roaming\\Microsoft\\Windows\\...

steam下载c s go桌面快捷方式
1\/7我们先要进入steam平台设置,启动steam平台2\/7输入你的steam平台账号和密码登陆,勾选记住密码,方便下次登陆3\/7进入客户端,点击库4\/7在库菜单下选择游戏进入5\/7在游戏列表中找到你要 建立快捷方式的游戏,鼠标右键单击游戏名称,选择属性进入6\/7在游戏属性的常规界面,点击创建桌面快捷方式7\/7桌面...

c盘桌面文件打不开了怎么办
如果要解决与这个路径相关的问题,需要具体描述遇到的问题是什么,比如文件丢失、无法访问桌面等。不过,如果是指该路径无法在资源管理器中直接打开,可以尝试通过运行窗口输入路径或者检查路径是否正确输入。详细 1. 理解路径 "C: Users Administrator Desktop" 应该是 "C:\\Users\\Administrator\\Desktop" 的...

电脑开机后可以很快进入桌面,但是资源管理器显示硬盘很慢~但可以在地址...
2、电脑使用的时间长了(解决:定期的清理电脑灰尘,一般一年一次,使用平凡的半年一次,如果自己清理不好送去电脑公司清理大概三十大洋左右);Ps:xian86913 3、电脑中病毒或者垃圾太多。解决:电脑最好装有类似360的杀毒软件和软件助手;定期查杀病毒和清理系统垃圾等;Ps:xian86913 4、桌面尽量少放文件...

双击桌面快捷方式(CCleaner)无反应
我尝试着右键点了属性,然后找兼容性,勾选“以兼容模式运行这个程序”,快捷键就可以打开了,你试一下能不能行

怎么修改C程序设计中的桌面上的时钟的时间
开始--设置--控制面板--日期时间--进行修改--确定。

如何写一个批处理:移动桌面上的所有文件和文件夹,但不移动桌面快捷方式...
批处理获取桌面路径和移动文件夹都没有vbs简单,所以最好用vbs代码:Set sh = CreateObject("Shell.Application")Set fd = sh.NameSpace("D:\\目标文件夹")For Each i In sh.NameSpace(0).Items '遍历桌面 If i.Type <> "快捷方式" And i.Type <> "系统文件夹" Then fd.MoveHere i...

帮忙告诉小弟桌面图标和快速启动栏里的东西在c:盘的哪个目录下吗?_百 ...
快速启动:C:\\Documents and Settings\\Administrator\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch 桌面:C:\\Documents and Settings\\Administrator(用户名)\\桌面

C语言如何开发桌面GUI应用程序?
最后我们就可以编写C语言代码来实现GUI程序开发了,测试代码如下,非常简单,一个简单的窗口程序:编译运行这个程序,效果如下,已经成功弹出窗口啦:这里你也可以配置Dev-C++,VS2017都可以,网上也有相关资料和教程。至此,我们就完成了利用C语言来开发桌面GUI程序,总的来说,整个过程不难,就是有些繁琐...

c远程桌面控制如何实现
远程桌面控制可以通过多种方式实现,以下是其中几种常见的方法:1. 使用远程桌面软件:如Windows的远程桌面、TeamViewer、向日葵远程控制等,这些软件可以在本地计算机上建立远程连接,并允许用户在远程计算机上控制对方的桌面。2. 利用云服务:许多云服务提供商提供了远程桌面访问功能,如Google Meet、Microsoft...

长垣县19480213851: VC中如何获取桌面快捷方式图标并对其操作 -
咎斧格尔: 快捷方式 属于 平台SDK 中 Windows Shell 的内容.用到了COM.相当麻烦.我替你查了一下MSDN.首先因为用到了COM,你要在你程序启动的时候 调用 CoInitilize(NULL);,在程序退出时调用CoUninitialize(); 然后是准备操作,找到你...

长垣县19480213851: vc装好程序后怎样创造桌面快捷方式
咎斧格尔:那有个vc集成开发平台,进程序安装目录,发送到桌面即可; 或者在开始,程序里找; 当然如果只安VC,还要手动编译,那是个自学的好机会;

长垣县19480213851: 我已经安装了vc++6.0,但没有桌面快捷方式,这是怎么回事 -
咎斧格尔: 这个问题和系统有一点关系,系统不是特别兼容,这源安全库,这个原因有两个: 1、你的系统不是正版; 2、不是全服务系统. 其实碰到上面的问题,并不会影响到平时正常使用vc6.0,在对应安装目录下面(.........\Microsoft Visual Studio\Common\MSDev98\Bin\)找到MSDEV.EXE文件,单击,并点击鼠标右键.发送到桌面快捷方式,就可以正常启动了.

长垣县19480213851: 关于VC++6.0 快捷方式
咎斧格尔: 到VC的安装文件夹下找到图标,路径名与下面的类似 "D:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE" 发送快捷方式到桌面 再把桌面的快捷方式拖到"程序"里去 或者 C:\Documents and Settings\用户名\「开始」菜单\程序 在这个地方加入快捷方式

长垣县19480213851: VC 在win7 64位的开始菜单所有程序中如何创建快捷方式?请给出小段代码,如参数设置
咎斧格尔: 首先,确定下你的问题就是创建快捷方式.打开你的程序安装位置,然后当然要找到程序启动的.exe文件,右键快捷方式发送到桌面,你说要在开始菜单中创建快捷方式,那么就把桌面的快捷方式拉到开始按钮上就会显示附加到开始菜单了.也没啥技巧,要是自己弄就这么弄.

长垣县19480213851: vc电脑上安装好了如何启用
咎斧格尔: 1、MicrosoftVisualC++6.0,简称VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序.VisualC++是一个功能强大的可视化软...

长垣县19480213851: visual c++ 6.0桌面快捷方式怎样创建? -
咎斧格尔: 嗯?你找到Visual C++安装目录,移动您的小鼠标到MSDEV.EXE这个文件上(找不到的话再资源管理器中ctrl+F去找),然后点击右键—》发送到-》桌面快捷方式就可以啦... 要是想加入到开始里面去,可以直接把桌面上的那个快捷方式拖到“开始”上的那个圈上,他就呆里面去了,或者把快捷方式复制到开始的那个文件夹里~~~

长垣县19480213851: 安装了VC++桌面上没图标 -
咎斧格尔: 对,就是没有图标的,你可以打开开始->程序把他找出来,然后手动创建一个桌面图标

长垣县19480213851: 桌面快捷方式里的起始位置如何取到,用C++取. -
咎斧格尔: 用CWnd::findWindow(参数,参数); 函数:static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );#define NO_WIN32_LEAN_AND_MEAN #include void __fastcall TForm1::Button1Click(TObject *...

长垣县19480213851: VC++如何获取桌面上“网络连接快捷方式”的图标 -
咎斧格尔: 嗯,系统的一些特殊图标不是你那样获取的,应该是用PIDL定位后去获取,你看一下我的代码 HICON GetIconForCSIDL(int csidl) { LPITEMIDLIST pidl = 0; SHGetSpecialFolderLocation(NULL, csidl, &pidl); if (pidl) { SHFILEINFO shellInfo; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网