成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

c++ - Windows系統(tǒng)中如何獲取快捷方式文件對(duì)應(yīng)的程序路徑?

瀏覽:147日期:2022-10-12 13:11:58

問(wèn)題描述

目標(biāo):獲取快捷方式文件對(duì)應(yīng)的程序(文件)路徑

環(huán)境: Windows 10, Visual Studio 2015, C++

問(wèn)題:

3.1 windows提供了獲取路徑的API, 參見[ISHellLink::GetPath][1]。3.2 使用SLGP_SHORTPATH作為參數(shù)能夠解決大部分問(wèn)題,但是對(duì)于涉及到重定向的,該函數(shù)返回的是錯(cuò)誤的路徑。 如“桌面/A.lnk”快捷方式文件對(duì)應(yīng)的程序是“C:Program FilesAA.exe”,但是使用該參數(shù)后,返回的路徑是“C:Program Files (x86)AA.exe”。3.3 使用SLGP_RAWPATH作為參數(shù),能獲取長(zhǎng)路徑,這樣可以對(duì)有環(huán)境變量的長(zhǎng)路徑進(jìn)行expand,目前是這個(gè)思路。但是函數(shù)有時(shí)會(huì)返回空字符串,但是MSDN上并沒有詳細(xì)的解釋。

問(wèn)題解答

回答1:

不要用ShortPath,8.3短文件名是DOS時(shí)代的東西。禁用64位文件重定向,Wow64DisableWow64FsRedirection。還原64位文件系統(tǒng)重定向, Wow64RevertWow64FsRedirection 函數(shù)。每當(dāng)成功調(diào)用禁用重定向做完所需操作后,必須立即恢復(fù)重定向,以免出現(xiàn)問(wèn)題。或者64位系統(tǒng)編譯一個(gè)64位的程序,就不會(huì)重定向了。你可以試著先獲取RawPath,失敗了再調(diào)用一次沒有RawPath的。注意RawPath可能包含環(huán)境變量,需要ExpandEnviron擴(kuò)展它。另外你可以試試這個(gè)庫(kù):https://github.com/libyal/liblnk

標(biāo)簽: Windows系統(tǒng)
相關(guān)文章: