Interfaccia Shell32.dll .NET dipende dal sistema operativo
Domanda
Chi vorrei trovare ogni applicazione elencati nel menu del programma utente. Io uso le seguenti impostazioni:
private static void ProcessDirectoryLnkFiles(string path, bool recurse,
UpdateProcessFromLnkDelegate sProcFile)
{
try
{
string[] sPrograms = Directory.GetFiles(path, "*.lnk",
SearchOption.TopDirectoryOnly);
string[] sSubdirs = Directory.GetDirectories(path);
Shell32.Shell shell = new Shell32.Shell();
foreach (string p in sPrograms) {
Shell32.Folder sLinkFolder;
Shell32.FolderItem sLinkFolderItem;
Shell32.ShellLinkObject sLinkObject;
string sLinkFullpath;
// Get link full path
sLinkFullpath = Path.GetFullPath(p);
// Get link folder
sLinkFolder = shell.NameSpace(
Path.GetDirectoryName(sLinkFullpath));
// Get link item
sLinkFolderItem = sLinkFolder.Items().
Item(Path.GetFileName(sLinkFullpath));
// Get link object
sLinkObject = (Shell32.ShellLinkObject)
sLinkFolderItem.GetLink;
if (sLinkObject.Target.IsFolder == false)
sProcFile(sLinkObject);
}
if (recurse == true)
foreach (string dir in sSubdirs)
ProcessDirectoryLnkFiles(dir, true, sProcFile);
}
catch (UnauthorizedAccessException eUnauthorizedAccessException) {
sLog.Warn("Unable to iterate on directory {0} ({1}).",
path, eUnauthorizedAccessException.Message);
}
catch (IOException eIOException) {
sLog.Warn("Unable to iterate on directory {0} ({1}).",
path, eIOException.Message);
}
catch (COMException eCOMException) {
}
catch {
throw;
}
}
Questo viene eseguito molto bene su Windows 7 x64. Ma, purtroppo, su Windows XP x86 l'oggetto Shell32.Shell
non dichiara la proprietà Shell32.Shell.Target
. Come faccio a fare questo percorso di codice su Windows XP?
Soluzione
Utilizza la proprietà Path, che ti dà il percorso verso l'obiettivo. System.IO.Directory.Exists () può poi dire se si tratta di directory oppure no.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow