Win32控制台获取可执行程序的快捷方式的目标位置、起始位置、快捷键、备注等
Win32控制台获取可执行程序的快捷方式的目标位置、起始位置、快捷键、备注等,示例如下图:

#include <iostream>
#include <atlstr.h>
#include <ShObjIdl.h>
#include <assert.h>
#include <ShlGuid.h>
using namespace std; struct ShortcutAttribute
{
CString Path_;//目标位置
CString WorkingDirectory_;//起始位置
CString Description_;//备注
WORD HotKey_;//快捷键
ShortcutAttribute()
{
Path_ = _T("");
WorkingDirectory_ = _T("");
Description_ = _T("");
}
}; bool GetShortcutAttribute(IN CString shortcutPath, OUT ShortcutAttribute& shortattr)
{
assert(shortcutPath != _T(""));
LPTSTR lpsz = shortcutPath.GetBuffer(MAX_PATH);
IShellLink* psl = NULL;
// Initialize the COM library.
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("ERROR - Could not initialize COM library");
return false;
}
HRESULT hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf = NULL;
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres))
{
#ifndef _UNICODE
wchar_t wsz[MAX_PATH];
::MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);
hres = ppf->Load(wsz, STGM_READ);
#else
hres = ppf->Load(lpsz, STGM_READ);
#endif
if (SUCCEEDED(hres))
{
//1.目标位置
WIN32_FIND_DATA wfd;
hres = psl->GetPath(shortattr.Path_.GetBuffer(MAX_PATH), MAX_PATH, &wfd, SLGP_UNCPRIORITY); //2.起始位置
hres = psl->GetWorkingDirectory(shortattr.WorkingDirectory_.GetBuffer(MAX_PATH), MAX_PATH); //3.备注
hres = psl->GetDescription(shortattr.Description_.GetBuffer(MAX_PATH), MAX_PATH); //4.快捷键
hres = psl->GetHotkey(&shortattr.HotKey_); shortattr.Path_.ReleaseBuffer();
shortattr.WorkingDirectory_.ReleaseBuffer();
shortattr.Description_.ReleaseBuffer();
}
ppf->Release();
}
psl->Release();
}
shortcutPath.ReleaseBuffer();
CoUninitialize();
return true;
} int main(int argc, char* argv[])
{
ShortcutAttribute sa;
bool flag = GetShortcutAttribute(CString(L"C:\\Users\\Public\\Desktop\\腾讯QQ.lnk"), sa);
if (flag)
{
cout << CT2A(sa.Path_.GetBuffer()) << endl;
cout << CT2A(sa.WorkingDirectory_.GetBuffer()) << endl;
cout << CT2A(sa.Description_.GetBuffer()) << endl;
cout << sa.HotKey_ << endl;
}
getchar();
return 0;
}
Win32控制台获取可执行程序的快捷方式的目标位置、起始位置、快捷键、备注等的更多相关文章
- vc2010 win32 控制台应用程序中文乱码
vc2010 win32 控制台应用程序中文乱码 在 vc2010 上用 win32 控制台程序写些测试代码调用 windows api ,处理错误信息时,发现用 wprintf 输出的错误信息出现了 ...
- Linux终端和win32控制台文本颜色输出
在使用putty.secureCRT.XShell等终端仿真器连接linux系统时,ls.vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性. 通常我们可以使用echo命令加-e ...
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
- win32控制台实现按任意键退出的功能
win7之后的五win32 控制台出现了程序运行完之后就立即结束的问题,程序员根本无法看输出的结果.未来让控制台运行完之后能够等待程序员的操作.可以使用: system("PAUSE&quo ...
- 控制台获取AngularJS某个元素的Scope
如何在控制台获取到某个元素的Scope呢? 假设,页面元素为: <label>Name:</label><input type="text" ng-m ...
- C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出
C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数 注意:在VS中调试执行时,在处理程序例程中设置断 ...
- delphi修改QQ快捷方式的目标地址达到在启动QQ的同时也能运行自己想要启动的EXE可执行文件
delphi修改QQ快捷方式的目标地址达到在启动QQ的同时也能运行自己想要启动的EXE可执行文件. 直接上代码,自已体会 !! Unit1.pas代码如下: unit Unit1; interface ...
- Visual Studio C++ Win32控制台应用程序,Win32项目,MFC的区别
背景 Visual Studio C++ 创建新项目蹦出来如下选项: Win32控制台应用程序,Win32项目,MFC有什么区别? 正文: Win32控制台,没有界面,命令行执行生成的文件则直接在后台 ...
- win32应用程序和win32控制台应用程序的区别
win32应用程序是有窗体的(当然也可以没有),有Windows消息循环机制的.而win32控制台应用程序只是在控制台下运行的程序,类似以前dos的程序. 后续答案: Win32 Appl ...
- Win32控制台程序和Win32应用程序
刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了. win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运 ...
随机推荐
- C#反序列化时,反射类型“XXX”时出错,提示:InvalidOperationException
C#反序列化时,反射类型"XXX"时出错,提示:InvalidOperationException的原因是因为: 一个类必须至少有一个空的默认构造函数,才能由XmlSerializ ...
- milvus基础
nlist和nprobe nlist 是调用 create_index 时设置的参数,nprobe 则是调用 search 时设置的参数. IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划 ...
- Commit规范
Commit规范 遵循commit规范是一件很重要的事,不仅更规范,而且也方便其他人查看git记录,所以这篇博客就用来浅记一下commit需要遵循的基本规范. commit格式 在 Angular 规 ...
- Chrome谷歌浏览器自动升级后页面字体过小
谷歌浏览器使用一段时间后系统自动升级后页面字体突然变小,如何进行设置呢,如下 1.在页面右上角选择浏览器设置-外观-自定义字体-设置字号等其他需要配置的参数即可
- Solution Set -「NOIP Simu.」20221010
会不会组题啊? 希望 trash round 少来点. 「Unkown」构造字符串 给定 \(m\) 组形如 \((x,y,z)\), 表示 \(\operatorname{lcp}(S[x: ...
- Solution -「NOI Simu.」树
\(\mathscr{Description}\) 给定 \(n\), 集合 \(\{a_m\}\), 称一棵无标号但儿子有序的有根树合法, 当且仅当叶子权值存在一个因数在 \(\{a_m\}\) ...
- CDS标准视图:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE
视图名称:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE 视图类型: 视图代码: 点击查看代码 @AbapCatalog.compiler.compareFilter: tru ...
- Python 潮流周刊#86:Jupyter Notebook 智能编码助手(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- MongoDB:文章评论系统模拟
- ctfshow--web1
第一题很简单 就是一个base64编码 我们打开开发者模式看源代码 Y3Rmc2hvd3s1MGMyZDdkYS1lOWZjLTQ5YzItYTRjZC1iZmJmZjIyYmI4NWV9将这段话ba ...