ich habe ein Problem bei dem ich leider absolut nicht weiter komme.
Ich will von meinem Programm ein Explorer-Fenster öffnen. Wenn dieser Pfad noch nicht in einem Fenster geöffnet ist, erstelle ich einen neuen Process. Das funktioniert auch soweit.
internal bool ExplorerfensterÖffnen(string pfad)
{
try
{
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename, folderPath = "";
foreach (SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if (filename.Equals("explorer"))
{
folderPath = ie.LocationURL;
}
if (folderPath.Length > 0)
{
folderPath = folderPath.Substring(8);
folderPath = folderPath.Replace("/", "\\");
folderPath = folderPath.Replace("%20", " ");
}
if (folderPath == pfad)
{
string result = new DirectoryInfo(folderPath).Name;
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, result);
if (windowPtr == IntPtr.Zero)
{
// Fenster ist nicht vorhanden, neues Fenster im Explorer öffnen
Process.Start("explorer.exe", pfad);
return true;
}
else
{
// Fenster ist vorhanden, und wird in den Vordergrund geholt
IntPtr handle = windowPtr;
if (IsIconic(handle))
{
ShowWindow(handle, SW_RESTORE);
}
SetForegroundWindow(handle);
return true;
}
}
}
}
catch
{
return false;
}
// Kein Fenster geöffnet
Process.Start("explorer.exe", pfad);
return true;
}
Jetzt zu meinem Problem:
Durch unterschiedliche Laufwerke (Lokal, Netzlaufwerk) und unterschiedliche Ordnerstrukturen (Ordner1\Ordner2 und Ordner3\Ordner2) wird immer das erste Fenster mit "Ordner2" in den Vordergrund geholt. Die Suche berücksichtigt nicht den gesamten Pfad, was allerdings in diesem Fall nötig wäre.
Ich hoffe ich habe mich verständlich ausgedrückt. Für Tipps, wie ich das lösen kann, bin ich sehr dankbar.
Grüße Stoffel