2 #define WIN32_LEAN_AND_MEAN
21 bool CreateLink(char * lpszPathObj, char * lpszPathLink, char * lpszDesc)
27 hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (void *)&psl);
31 uint16 pathObj[2048] = { 0 };
32 uint16 desc[2048] = { 0 };
34 UTF8toUTF16Buffer(lpszPathObj, pathObj, sizeof(pathObj) / sizeof(uint16));
35 UTF8toUTF16Buffer(lpszDesc, desc, sizeof(desc) / sizeof(uint16));
36 IShellLinkW_SetPath(psl, pathObj);
37 IShellLinkW_SetDescription(psl, desc);
39 //hres = IShellLinkA_QueryInterface(psl, &IID_IPersistFile, (void *)&ppf);
40 hres = IShellLinkW_QueryInterface(psl, &IID_IPersistFile, (void *)&ppf);
45 MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);
46 hres = IPersistFile_Save(ppf, wsz, TRUE);
47 IPersistFile_Release(ppf);
49 IShellLinkW_Release(psl);
54 bool GetLinkTarget(char * lpszPathObj, char ** lpszPathLink)
60 hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (void *)&psl);
64 uint16 pathObj[2048] = { 0 };
66 UTF8toUTF16Buffer(lpszPathObj, pathObj, sizeof(pathObj) / sizeof(uint16));
68 hres = IShellLinkW_QueryInterface(psl, &IID_IPersistFile, (void *)&ppf);
73 if(MultiByteToWideChar(CP_ACP, 0, lpszPathObj, -1, wsz, MAX_PATH))
75 if(SUCCEEDED(IPersistFile_Load(ppf, wsz, STGM_READ)))
77 WCHAR szTarget[MAX_PATH];
78 if(NOERROR == IShellLinkW_GetPath(psl, szTarget, MAX_PATH, NULL, 0))
80 char pathTarget[2048] = { 0 };
81 UTF16toUTF8Buffer(szTarget, pathTarget, sizeof(pathTarget) / sizeof(uint16));
82 *lpszPathLink = CopyString(pathTarget);
86 IPersistFile_Release(ppf);
88 IShellLinkW_Release(psl);