同步操作将从 精易科技/eapi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "..\include_eapi_header.h"#include<shlwapi.h>#include<shlobj_core.h>#pragma comment(lib,"shlwapi.lib")#pragma warning(disable :6031)static BOOL GetShortCutTarget(const std::wstring& lpszLinkFilePath, std::wstring* FilePath, std::wstring* LinkArg, std::wstring* BeginPosition, std::wstring* IconPath, int* RunMod, std::wstring* shortkey, std::wstring* remarks){BOOL bReturn = FALSE;IShellLinkW* pShellLink = 0;CoInitialize(NULL);if (S_OK == CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void**)&pShellLink)){IPersistFile* pPersistFile = 0;if (S_OK == pShellLink->QueryInterface(IID_IPersistFile, (void**)&pPersistFile)){if (S_OK == pPersistFile->Load(lpszLinkFilePath.c_str(), STGM_READ)){WCHAR Temp[MAX_PATH] = { 0 }; int Icon = 0;if (FilePath){*FilePath = {};if (S_OK == pShellLink->GetPath(Temp, MAX_PATH, 0, SLGP_UNCPRIORITY))//文件路径{*FilePath = Temp;}memset(Temp, 0, sizeof(Temp));}if (LinkArg){*LinkArg = {};if (S_OK == pShellLink->GetArguments(Temp, MAX_PATH))//获取参数{*LinkArg = Temp;}memset(Temp, 0, sizeof(Temp));}if (BeginPosition){*BeginPosition = {};if (S_OK == pShellLink->GetWorkingDirectory(Temp, MAX_PATH))//工作文件夹{*BeginPosition = Temp;}memset(Temp, 0, sizeof(Temp));}if (IconPath){*IconPath = {};if (S_OK == pShellLink->GetIconLocation(Temp, MAX_PATH, &Icon))//图标信息{*IconPath = Temp + std::to_wstring(Icon);}memset(Temp, 0, sizeof(Temp));}if (RunMod){*RunMod = 0;pShellLink->GetShowCmd(RunMod);}if (shortkey){*shortkey = {};WORD OutShortKey = 0;if (S_OK == pShellLink->GetHotkey(&OutShortKey) && OutShortKey)//图标信息{const WCHAR* KeycStr[] = { L"" ,L"Shift", L"Ctrl" ,L"Shift+Ctrl",L"Alt", L"Shift+Alt",L"Ctrl+Alt",L"Shift+Ctrl+Alt" };BYTE Skey[4] = { LOBYTE(OutShortKey) ,0,0,0 };int Index = (int)HIBYTE(OutShortKey);if (Index == 0){*shortkey = std::wstring((wchar_t*)Skey);}else if (Index <= 7 && Index > 0){*shortkey = KeycStr[Index] + std::wstring(L"+") + std::wstring((wchar_t*)Skey);}}}if (remarks){*remarks = {};if (S_OK == pShellLink->GetDescription(Temp, MAX_PATH))//图标信息{*remarks = Temp;}}}pPersistFile->Release();}pShellLink->Release();}CoUninitialize();return bReturn;}static BOOL GetShortCutTarget(const std::wstring& lpszLinkFilePath, std::wstring* FilePath, std::wstring* LinkArg, std::wstring* BeginPosition, std::wstring* IconPath, int* RunMod, int* shortkey, std::wstring* remarks){BOOL bReturn = FALSE;IShellLinkW* pShellLink = 0;CoInitialize(NULL);if (S_OK == CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void**)&pShellLink)){IPersistFile* pPersistFile = 0;if (S_OK == pShellLink->QueryInterface(IID_IPersistFile, (void**)&pPersistFile)){if (S_OK == pPersistFile->Load(lpszLinkFilePath.c_str(), STGM_READ)){WCHAR Temp[MAX_PATH] = { 0 }; int Icon = 0;if (FilePath){*FilePath = {};if (S_OK == pShellLink->GetPath(Temp, MAX_PATH, 0, SLGP_UNCPRIORITY))//文件路径{*FilePath = Temp;}memset(Temp, 0, sizeof(Temp));}if (LinkArg){*LinkArg = {};if (S_OK == pShellLink->GetArguments(Temp, MAX_PATH))//获取参数{*LinkArg = Temp;}memset(Temp, 0, sizeof(Temp));}if (BeginPosition){*BeginPosition = {};if (S_OK == pShellLink->GetWorkingDirectory(Temp, MAX_PATH))//工作文件夹{*BeginPosition = Temp;}memset(Temp, 0, sizeof(Temp));}if (IconPath){*IconPath = {};if (S_OK == pShellLink->GetIconLocation(Temp, MAX_PATH, &Icon))//图标信息{*IconPath = Temp + std::to_wstring(Icon);}memset(Temp, 0, sizeof(Temp));}if (RunMod){*RunMod = 0;pShellLink->GetShowCmd(RunMod);}if (shortkey){*shortkey = 0;WORD OutShortKey = 0;if (S_OK == pShellLink->GetHotkey(&OutShortKey) && OutShortKey)//图标信息{*shortkey = OutShortKey;}}if (remarks){*remarks = {};if (S_OK == pShellLink->GetDescription(Temp, MAX_PATH))//图标信息{*remarks = Temp;}}}pPersistFile->Release();}pShellLink->Release();}CoUninitialize();return bReturn;}// 调用格式: SDT_TEXT 取快捷方式目标, 命令说明: "获取指定快捷方式(.lnk)的目标和参数。成功返回目标,失败返回空。只有第一个参数为输入参数,后面的其它参数均为输出参数(可省略)。"// 参数<1>: 快捷方式文件名 SDT_TEXT, 参数说明: NULL// 参数<2>: [&目标 SDT_TEXT], 参数说明: "快捷方式文件名绑定的程序路径"// 参数<3>: [&参数 SDT_TEXT], 参数说明: "默认参数"// 参数<4>: [&启始位置 SDT_TEXT], 参数说明: "快捷方式的上级目录"// 参数<5>: [&图标 SDT_TEXT], 参数说明: "返回的文本格式为:图标所属文件 + , + 图标序号(0为第一个),例如:"c:\\x.exe,1"。"// 参数<6>: [&运行方式 SDT_INT], 参数说明: "。1:常规窗口;2:最小化;3:最大化"// 参数<7>: [&快捷键 _SDT_ALL], 参数说明: "可以传入文本型或整数型型变量。如果为文本型,返回快捷键文本形式,如"Ctrl + Shift + Alt + A"。如果为整数型,返回一个表示该快捷键的数值(参见http://msdn.microsoft.com/en-us/library/bb774926"// 参数<8>: [&备注 SDT_TEXT], 参数说明: "快捷方式的描述"EAPI_EXTERN_C void eapi_GetShortCutTarget_41_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf){std::wstring Name, Path, Arg, Dir, Icon, KeyStr, Remark; int RunMode = 0, Key = 0;if (pArgInf[0].m_dtDataType == SDT_TEXT && pArgInf[0].m_pText && *pArgInf[0].m_pText != '0円'){int widesize = MultiByteToWideChar(CP_ACP, 0, pArgInf[0].m_pText, -1, NULL, 0);wchar_t* resultstring = new wchar_t[widesize] {0};int convresult = MultiByteToWideChar(CP_ACP, 0, pArgInf[0].m_pText, -1, resultstring, widesize);Name = resultstring;delete[] resultstring;}else{return;}if (pArgInf[6].m_dtDataType == SDT_TEXT){GetShortCutTarget(Name, &Path, &Arg, &Dir, &Icon, &RunMode, &KeyStr, &Remark);}else{GetShortCutTarget(Name, &Path, &Arg, &Dir, &Icon, &RunMode, &Key, &Remark);}pRetData->m_pText = clone_text(Path);if (pArgInf[1].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 1;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(Path);;}if (pArgInf[2].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 2;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(Arg);;}if (pArgInf[3].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 3;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(Dir);;}if (pArgInf[4].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 4;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(Icon);;}if (pArgInf[5].m_dtDataType == SDT_INT){PMDATA_INF pInf = pArgInf + 5;*pInf->m_pInt = RunMode;}if (pArgInf[6].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 6;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(KeyStr);}else if (pArgInf[6].m_dtDataType == SDT_INT){PMDATA_INF pInf = pArgInf + 6;*pInf->m_pInt = Key;}if (pArgInf[7].m_dtDataType == SDT_TEXT){PMDATA_INF pInf = pArgInf + 7;efree(*pInf->m_ppText);*pInf->m_ppText = clone_text(Remark);}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。