Windows Gezgini'nde C# uygulamasından şu anda seçili dosyaların bir listesini almak mümkün mü?Geçerli seçimi WindowsExplorer'da bir C# uygulamasından edinme?
Windows Gezgini'yle C# gibi yönetilen bir dilden etkileşimde bulunmanın farklı yöntemleri üzerinde çok fazla araştırma yaptım. Başlangıçta, kabuk uzantıları (örneğin, here ve here) uygulamalarına bakıyordum, ama görünüşe göre bu yönetilen kodun içinden kötü bir fikir ve muhtemelen benim durumum için çok fazla. ,
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
ArrayList windows = new ArrayList();
foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if(filename.Equals("explorer"))
{
Console.WriteLine("Hard Drive: {0}", ie.LocationURL);
windows.Add(ie);
var shell = new Shell32.Shell();
foreach (SHDocVw.InternetExplorerMedium sw in shell.Windows())
{
Console.WriteLine(sw.LocationURL);
}
}
}
... Ama bireysel InternetExplorer
nesneler geçerli dosya seçimi almak için hiçbir yöntemleri var:
Sonraki, ben PInvoke/COM çözümleri içine baktı ve bu kodun götürdü hangi this article bulundu Pencereyle ilgili bilgi almak için kullanılabilirler.
Daha sonra tam ihtiyacım olanı C++ 'da this article buldum. Bunu bir başlangıç noktası olarak kullanarak, projemde referans olarak shell32.dll
ekleyerek bazı çeviri yapmayı denedim. Ben ile sona erdi aşağıdadır:
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
ArrayList windows = new ArrayList();
foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if(filename.Equals("explorer"))
{
Console.WriteLine("Hard Drive: {0}", ie.LocationURL);
windows.Add(ie);
var shell = (Shell32.IShellDispatch4)new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(ie.LocationURL);
Shell32.FolderItems items = folder.Items();
foreach (Shell32.FolderItem item in items)
{
...
}
}
}
ben pencere için bir Folder
nesne almak ve her öğe için mümkün çünkü bu, biraz daha yakın, ama hala geçerli seçimi almak için bir yol göremiyorum .
Tamamen yanlış yere bakıyor olabilirim, ama sahip olduğum tek ipuçlarını takip ediyorum. Beni uygun PInvoke/COM çözümüne yönlendiren var mı?