如何獲取快捷文件夾的目錄目標?我到處搜索,只能找到快捷方式文件的目標。獲取快捷文件夾的目標
回答
我想你會需要使用COM,並添加到「微軟殼牌控制和自動化」的引用,如this blog post描述:
下面是使用提供的代碼有一個例子:
namespace Shortcut
{
using System;
using System.Diagnostics;
using System.IO;
using Shell32;
class Program
{
public static string GetShortcutTargetFile(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell shell = new Shell();
Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return string.Empty;
}
static void Main(string[] args)
{
const string path = @"C:\link to foobar.lnk";
Console.WriteLine(GetShortcutTargetFile(path));
}
}
}
謝謝!現在我只需要找出如何尋找一個shortcuf文件夾programmaticaly :) – 2012-02-24 12:11:04
我工作在Windows 7 64位,並且它找不到安裝在'C:\ Program Files \ Oracle \ VirtualBoxOSX'上的VirtualBox快捷方式。它一直將目標返回到'C:\ Program Files文件(x86)\ Oracle \ VirtualBoxOSX \ VirtualBox.exe'。對此行爲的任何解釋? – swdev 2014-03-11 01:08:44
在此方法中使用Shell32只允許在單線程應用程序中使用。你必須在主入口點包含[STAThread]。使用此代碼您將在單元測試中遇到異常,因爲單元測試不允許STAThread。請參閱[答案](http://stackoverflow.com/questions/14543340/calling-shell32-dll-from-net-windows-service)。也有解決方案在單元測試中運行此代碼,請參閱http://haacked.com/archive/2014/11/20/xunit-and-sta/ – yancyn 2016-08-19 05:50:44
所有文件快捷方式都有一個.lnk文件擴展名,您可以檢查。例如,使用字符串,你可以使用string.EndsWith(「。lnk」)作爲過濾器。
所有URL快捷方式都有.url文件擴展名,因此如果需要,您還需要考慮這些擴展名。
OP詢問如何獲取目標目錄的快捷方式,而不是如何檢查它是否是一條捷徑。 – 2017-01-25 02:47:33
如果你不想使用依賴關係,你可以使用https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/ 但是lnk格式沒有記錄,所以只有在你理解了風險的情況下才可以。
,如果你想找到一個具有快捷方式在桌面上,我用一個簡單的方法你的應用程序的路徑,如下所示:
Process.GetCurrentProcess().MainModule.FileName.Substring(0, Process.GetCurrentProcess().MainModule.FileName.LastIndexOf("\\")
此代碼返回運行,不管是誰要求文件的任何exe文件路徑
一個更簡單的方式來獲得,我用的是鏈接路徑:
private static string LnkToFile(string fileLink)
{
string link = File.ReadAllText(fileLink);
int i1 = link.IndexOf("DATA\0");
if (i1 < 0)
return null;
i1 += 5;
int i2 = link.IndexOf("\0", i1);
if (i2 < 0)
return link.Substring(i1);
else
return link.Substring(i1, i2 - i1);
}
但它當然會破的,如果LNK文件格式的變化。
在它需要這樣做,首先添加COM參考Windows 10「微軟殼牌控制和自動化」
// new way for windows 10
string targetname;
string pathOnly = System.IO.Path.GetDirectoryName(LnkFileName);
string filenameOnly = System.IO.Path.GetFileName(LnkFileName);
Shell shell = new Shell();
Shell32.Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null) {
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
targetname = link.Target.Path; // <-- main difference
if (targetname.StartsWith("{")) { // it is prefixed with {54A35DE2-guid-for-program-files-x86-QZ32BP4}
int endguid = targetname.IndexOf("}");
if (endguid > 0) {
targetname = "C:\\program files (x86)" + targetname.Substring(endguid + 1);
}
}
- 1. 啓動文件夾的快捷方式
- 2. 如何從系統快捷方式獲取快捷shell圖標?
- 3. Powershell取代快捷方式目標
- 4. TortoiseSVN文件夾 - 快捷方式
- 5. 快捷文件夾作爲目錄在PHP
- 6. VIM NERDTree快捷方式打開標準Rails文件夾
- 7. 在codeigniter中的文件上傳快捷方式文件夾
- 8. flex:創建另一個文件/文件夾的快捷方式
- 9. 我如何獲得目標文件在我的硬盤上的快捷方式?
- 10. extensionscript:獲取項目的文件夾
- 11. 獲取的當前項目文件夾
- 12. 通過快捷方式文件夾從基礎文件夾加載文件?
- 13. 獲取目錄中的所有文件夾和子文件夾
- 14. 部署項目:文件系統:添加快捷方式到文件夾
- 15. 在快速啓動文件夾中創建快捷方式
- 16. 快速獲取文件夾的文件數
- 17. 如何使用快捷方式獲取更新的jnlp文件?
- 18. 獲取從JSON文件中的數據,快捷
- 19. 找不到快捷方式的目標
- 20. 適應目標的快捷方式
- 21. 如何獲取UserName/My Pictures文件夾的目標路徑?
- 22. xamarin.android中的Xam.Plugin.Media事先獲取目標文件夾
- 23. 如何在Windows RT metro應用程序中讀取快捷方式文件(並獲取其目標)?
- 24. 在遠程桌面上創建快捷方式,但快捷方式是用「文件」而不是「文件夾」作爲「目標類型」創建的
- 25. 從目標文件獲取源文件
- 26. 德爾福 - 獲取文件夾圖標
- 27. 獲取文件夾圖標路徑
- 28. 獲取文件夾
- 29. 獲取文件夾
- 30. 獲取文檔目錄的文件夾中的文件在iPhone
這並不涉及到所有的WPF,我刪除了標籤 – 2012-02-23 13:41:12
這是解決方案我更喜歡:[如何從文件快捷方式獲取路徑名?](http://stackoverflow.com/a/13079688/3757210) – ilcorvo 2017-02-23 13:20:55