我创建了一个抓取Clipboard
类文本内容的按钮,检查它是否是文件夹路径并创建了一个超链接。用户可能只是从资源管理器窗口复制路径。我遇到的问题似乎与我发现的很多问题相反,我想要驱动路径(T:\ Natzely)而不是UNC路径(\ SEOMAFIL02 \ Trash \ Natzely)。
当我将复制的路径转换为Word,记事本或Outlook时,它会被复制为驱动器路径,但是当我将其复制到Chrome的地址栏或尝试从Clipboard
类中检索它时,它会被复制作为UNC的道路。微软如何处理这个问题?
我的驱动器信件几乎保持静止,因此我不必担心T驱动器将来不会成为垃圾箱驱动器。
修改
这是代码
object clipboardText = Clipboard.GetText();
if(!Directory.Exists(clipboardText.ToString()))
{
//Show error message
}
doc = GetDoc(); //Get document to add the hyperlink to
sel = doc.Selection;
range = sel.Range;
hyperlinks = sel.Hyperlinks;
hyperlinks.Add(range, ref clipboardText);
编辑Numero Dos
Hyperlinks.Add
似乎比剪贴板更具问题。如果我在剪贴板文本object clipboardText = " " + Clipboard.GetText()
之前添加空格似乎可以解决问题,那么超链接现在将具有额外的空间,但链接仍然可以正常工作。
答案 0 :(得分:2)
您是否从Microsoft看到此问题? Translate UNC path to local mounted driveletter.
似乎有两种方式。第一种方法是从注册表中获取值:string UNCtoMappedDrive(string uncPath)
{
Microsoft.Win32.RegistryKey rootKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("network");
foreach (string subKey in rootKey.GetSubKeyNames())
{
Microsoft.Win32.RegistryKey mappedDriveKey = rootKey.OpenSubKey(subKey);
if (string.Compare((string)mappedDriveKey.GetValue("RemotePath", ""), uncPath, true) == 0)
return subKey.ToUpperInvariant() + @":\";
}
return uncPath;
}
另一种方法是使用System.Management。这个例子很大,但这是它的核心:
private void LoadDrives()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT RemoteName, LocalName FROM Win32_NetworkConnection");
List<UncToDrive> drives = new List<UncToDrive>();
foreach (ManagementObject obj in searcher.Get())
{
object localObj = obj["LocalName"];
if (!Object.Equals(localObj, null))
drives.Add(new UncToDrive(obj["RemoteName"].ToString(), localObj.ToString()));
}
}
他们使用驱动器(LocalName)和不使用(RemoteName)搜索所有路径,然后将它们保存在列表中以便以后查找。