Laden...

(Bild-)Datei im Standard-Programm öffnen

Letzter Beitrag vor 11 Tagen 10 Posts 2.470 Views
(Bild-)Datei im Standard-Programm öffnen

Moin,
habe ein Problem zu dem ich keine (vernünftige Lösung) finde,
wobei es doch bestimmt so einfach ist.

Ich habe ein ImageTreeView.
Befüllt von einem ImageListView.

Jetzt will ich nach einem doppelklickevent auf ein Bild
das Bild mit dem Standartwindowsprogramm öffnen
(z.B. Windows FotoAnzeige)

foreach (ImageListViewItem item in imageListView1.SelectedItems)
            {
                
                using (Image img = Image.FromFile(item.FileName))
                {
                    
                    
                    System.Diagnostics.Process.Start(" blabla " , FileName);
                }
                
            }

Hallo schorge,

verwende:

Process.Start(FileName);

Und beachte bei solchen Standardaufgaben bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.

herbivore

Danke 👍

Hallo,

die Lösung ist natürlich richtig.

Wenn man ergänzend aber auch nach dem Öffnen der Datei im Standardprogramm mit den Pfeiltasten rechts/links zu den weiteren Bildern im gleichen Verzeichnis wechseln möchte klappt das damit nicht.
Öffnet man die Datei dagegen selber im Explorer über Doppelklick, steht diese Funktion mit den Pfeiltasten zur Verfügung (ich nutze die Windows-Fotoanzeige als Standardprogramm).

Ich habe auch schon ausprobiert über folgenden Code das Arbeitsverzeichnis mitzugeben, hilft aber leider auch nicht.

                           Process.Start(new ProcessStartInfo(_file)
                            {
                                UseShellExecute = true, // Stellt sicher, dass das Standardprogramm für den Dateityp verwendet wird
                                WorkingDirectory = pfad // Setzt das Arbeitsverzeichnis auf das Bildverzeichnis
                            });

auch das programmgesteuerte Öffnen über den Explorer hilft nicht

Process.Start("explorer.exe", _file);

Hat jmd. vielleicht eine Idee?

VG

Joe

Hast du denn in _file weiterhin auch den kompletten Pfad drin stehen?

Und was passiert, wenn du bei dem Bild in der Windows-Fotoanzeige die Taste F(Filmstreifen) drückst? Siehst du dann die anderen Bilder des Ordners?

PS: Dein 2. Code ist logisch falsch, da der Windows-Explorer nicht (direkt) eine einzelne Datei als Parameter entgegennimmt, sondern man bestimmte Optionen angeben muß, s. z.B. File Explorer command line arguments in Windows 10.
Und außerdem würdest du damit nur die Datei (bzw. den Ordner) im Explorer anzeigen, nicht das zugehörige Programm öffnen.

in _file steht der komplette Pfad inkl. Dateinamen und Endung drin.

Die Taste F bestätigt mein Problem. Der Filmstreifen enthält weitere Bilder nur, wenn ich das Bild aus dem Dateiexplorer heraus öffne.
Bei Verwendung beider Codes, bekomm ich mit Taste F nur das eine Bild im Filmstreifen angezeigt.

P.S: Der 2. Code klappt bei mir, klappt so auch aus der Eingabeaufforderung heraus, siehe Bild

Ich habe selber nun mal versucht eine Bilddatei bei mir genauso zu öffnen - aus der Konsole heraus.
Aber weder ein "cd /D <path>" noch die Angabe des Pfads zeigt (wie bei dir) die anderen Bilder in der Windows-Fotoanzeige an. Ich habe sogar noch eine Batch-Datei erstellt, aber auch dies funktioniert nicht wie gewünscht.

Intern benutzt der Windows-Explorer die Funktion ShellExecute zum Öffnen von Dateien und eigentlich sollte UseShellExecute = true diese Funktion intern dann ebenso verwenden, aber anscheinend ist doch noch etwas anders.

Evtl. benutzt der Explorer auch die erweiterte Funktion ShellExecuteEx (mit einer eigenen Struktur als Parameter), die sich dann anders verhält?

Du könntest diese Funktion auch selber mit C# verwenden, s. PInvoke.net/ShellExecuteEx (Shell32)., müßtest aber selber die passenden Werte für die ShellExecuteInfo-Struktur durch Doku-Lesen und Ausprobieren herausfinden.
Du solltest aber generell dann schon mal mit PInvoke/Interop gearbeitet haben.

PS:
Du hast Recht mit dem Explorer (evtl. hat sich das seit einigen Windows-Versionen geändert?). Ich habe sonst immer das Konsolenkommando "start" (bzw. nur den Dateipfad+Name) dafür benutzt.

Bekomme zwar ein Bild auch über ShellExecuteEx geöffnet, aber der Windows Bildbetrachter lässt mich mit den Pfeiltasten auch hier nicht weiter navigieren.

Habs jetzt über ein eigen programmiertes Bildanzeigefenster geöffnet, was die gewünschten Funktionen ausführt.

Trotzdem Danke für die Unterstützung.

Zitat von Joe78

Bekomme zwar ein Bild auch über ShellExecuteEx geöffnet, aber der Windows Bildbetrachter lässt mich mit den Pfeiltasten auch hier nicht weiter navigieren.

Das is nen bekannter Bug in der App, leider seit Jahren. Der is besonders zu merken, wenn man durch nen OneDrive Ordner navigiert, und die Bilder dynamisch nachgeladen werden. Man muss dann nicht immer, aber oft die App neu starten, ansonsten erkennt werden die neuen/nachgeladenen Bilder nicht erkannt.

Wird wohl nie gefixt werden.

Es ist aber eigenartig, daß vom Explorer aus immer alle Bilder des Ordners in der Windows-Fotoanzeige durch Navigation angeschaut werden können. Vllt. gibt es eine interne Kopplung zwischen beiden Programmen?