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)环境下运 ...
随机推荐
- Qt编写地图综合应用25-echart动态交互
一.前言 之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函 ...
- [转]Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
原文链接: Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
- Unix和Windows操作系统中路径中的正斜杠和反斜杠的区别
- 《CUDA编程:基础与实践》读书笔记(4):CUDA流
1. CUDA流 一个CUDA流指的是由主机发出的在一个设备中执行的CUDA操作序列.除主机端发出的流之外,还有设备端发出的流,但本文不考虑后者.一个CUDA流中的各个操作按照主机发布的次序执行:但来 ...
- redis-总结列表
基础 启动命令 redis-server kconfig/redis.conf 通过指定的配置文件启动服务(kconfig/redis.conf是复制过来的) redis-cli -p 6379 使用 ...
- 配置教程-jdk-tomcat-maven
二.下载并安装JDK 选择一个适合自己的JDK版本下载并安装即可,具体流程不详述. 二.环境变量配置 1.右键桌面上"我的电脑">>"属性",在弹出 ...
- linux:redis
查询: 链接 redis初了解 是一个 "开源.免费" 的高性能的 key - value 的数据库 安装 yum添加epel源 yum install epel-release ...
- react事件 报错Cannot read property 'setState' of undefined
import React, { Component } from "react"; export class TestHanderClick extends Component { ...
- 天翼云CDR基本概念
本文分享自天翼云开发者社区<天翼云CDR基本概念>,作者:f****n 产品定义 云容灾CT-CDR(Cloud Disaster Recovery)为云主机提供跨可用区的容灾保护能力,R ...
- 设置npm、yarn和pnpm的国内镜像地址和yarn命令相关问题
1.npm 全局设置: 输入如下命令查看镜像地址: npm config get registry 输入如下命令设置镜像地址为淘宝: // 推荐地址 npm config set registry h ...