c++ - Windows系統中如何獲取快捷方式文件對應的程序路徑?
問題描述
目標:獲取快捷方式文件對應的程序(文件)路徑
環境: Windows 10, Visual Studio 2015, C++
問題:
3.1 windows提供了獲取路徑的API, 參見[ISHellLink::GetPath][1]。3.2 使用SLGP_SHORTPATH作為參數能夠解決大部分問題,但是對于涉及到重定向的,該函數返回的是錯誤的路徑。 如“桌面/A.lnk”快捷方式文件對應的程序是“C:Program FilesAA.exe”,但是使用該參數后,返回的路徑是“C:Program Files (x86)AA.exe”。3.3 使用SLGP_RAWPATH作為參數,能獲取長路徑,這樣可以對有環境變量的長路徑進行expand,目前是這個思路。但是函數有時會返回空字符串,但是MSDN上并沒有詳細的解釋。
問題解答
回答1:不要用ShortPath,8.3短文件名是DOS時代的東西。禁用64位文件重定向,Wow64DisableWow64FsRedirection。還原64位文件系統重定向, Wow64RevertWow64FsRedirection 函數。每當成功調用禁用重定向做完所需操作后,必須立即恢復重定向,以免出現問題。或者64位系統編譯一個64位的程序,就不會重定向了。你可以試著先獲取RawPath,失敗了再調用一次沒有RawPath的。注意RawPath可能包含環境變量,需要ExpandEnviron擴展它。另外你可以試試這個庫:https://github.com/libyal/liblnk
相關文章:
1. python如何不改動文件的情況下修改文件的 修改日期2. angular.js - 不適用其他構建工具,怎么搭建angular1項目3. angular.js - Angular路由和express路由的組合使用問題4. python - django 里自定義的 login 方法,如何使用 login_required()5. java8中,邏輯與 & 符號用在接口類上代表什么意思6. mysql優化 - mysql count(id)查詢速度如何優化?7. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?8. 主從備份 - 跪求mysql 高可用主從方案9. node.js - node_moduls太多了10. python - 關于ACK標志位的TCP端口掃描的疑惑?
