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, 參見(jiàn)[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上并沒(méi)有詳細(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)用一次沒(méi)有RawPath的。注意RawPath可能包含環(huán)境變量,需要ExpandEnviron擴(kuò)展它。另外你可以試試這個(gè)庫(kù):https://github.com/libyal/liblnk
相關(guān)文章:
1. docker綁定了nginx端口 外部訪問(wèn)不到2. javascript - 深夜被問(wèn)題困擾求解惑,rn的API之PermissionsAndroidd的問(wèn)題3. javascript - 最近用echarts做統(tǒng)計(jì)圖時(shí)遇到兩個(gè)問(wèn)題!!4. android權(quán)限被第三方安全軟件禁止,如何獲取該權(quán)限狀態(tài)5. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?6. mysql - 我的myeclipse一直連顯示數(shù)據(jù)庫(kù)連接失敗,不知道為什么7. git - webstorm窗口中左側(cè)列表的文件名顏色怎么修改8. Discuz! Q 有人用過(guò)嗎?9. javascript - onclick事件點(diǎn)擊不起作用10. android - 優(yōu)酷的安卓及蘋(píng)果app還在使用flash技術(shù)嗎?

網(wǎng)公網(wǎng)安備