c++ - Windows系統(tǒng)中如何獲取快捷方式文件對(duì)應(yīng)的程序路徑?
問(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
相關(guān)文章:
1. objective-c - ios百度地圖定位問(wèn)題2. html5 - 如何解決bootstrap打開模態(tài)modal窗口引起頁(yè)面抖動(dòng)?3. javascript - 求助關(guān)于js正則問(wèn)題4. javascript - node.js服務(wù)端渲染解疑5. javascript - 求助這種功能有什么好點(diǎn)的插件?6. html5 - rudy編譯sass的時(shí)候有中文報(bào)錯(cuò)7. html - css 如何添加這種邊框?8. 為何 localStorage、sessionStorage 屬于html5的范疇,但是為何 IE8卻支持?9. 微信開放平臺(tái) - Android調(diào)用微信分享不顯示10. javascript - 關(guān)于定時(shí)器 與 防止連續(xù)點(diǎn)擊 問(wèn)題
