Fenstername von Prozess anzeigen lassen (vbs)
Hallo,
mittels des folgenden Codes kann ich einen bestimmten Prozess "abschießen":
Wenn ich die Datei mittels IrfanView geöffnet habe funktioniert es auch. Im Taskmanager wird auch unter "Anwendungen" der Fenstername angezeigt (Dateiname mit kompletten Pfad angezeigt, gefolgt von "- IrfanView").
Wenn die selbe Datei allerdings mit der Windows-Fotoanzeige geöffnet ist (dllhost.exe) funktioniert es nicht, offenbar weil im Fensternamen nicht der gesamte Pfad enthalten ist, sondern nur "Test-1,jpg - Windows-Fotoanzeige". Allerdings wird "Test-1.jpg" nicht einmal gefunden...
Wie kann ich dennoch diese Datei schließen, alle anderen eventuell mit der Windows-Fotoanzeige geöffneten Dateien sollen offen bleiben?
Danke schon mal im Voraus!
Torsten
mittels des folgenden Codes kann ich einen bestimmten Prozess "abschießen":
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objProzesse = WMI.ExecQuery("Select * from Win32_Process")
For Each objProzess In objProzesse
If InStr(objProzess.CommandLine, "Test-1.jpg") Then
objProzess.Terminate (0)
End If
Next
Wenn ich die Datei mittels IrfanView geöffnet habe funktioniert es auch. Im Taskmanager wird auch unter "Anwendungen" der Fenstername angezeigt (Dateiname mit kompletten Pfad angezeigt, gefolgt von "- IrfanView").
Wenn die selbe Datei allerdings mit der Windows-Fotoanzeige geöffnet ist (dllhost.exe) funktioniert es nicht, offenbar weil im Fensternamen nicht der gesamte Pfad enthalten ist, sondern nur "Test-1,jpg - Windows-Fotoanzeige". Allerdings wird "Test-1.jpg" nicht einmal gefunden...
Wie kann ich dennoch diese Datei schließen, alle anderen eventuell mit der Windows-Fotoanzeige geöffneten Dateien sollen offen bleiben?
Danke schon mal im Voraus!
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 292816
Url: https://administrator.de/contentid/292816
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
3 Kommentare
Neuester Kommentar
Hi,
objProcess.CommandLine gibt Dir nicht den Fensternamen oder -titel. Sondern, wie der Name schon sagt, die Kommandozeile, welche ausgeführt wurde, um diesen Prozess zu starten.
Es gibt Anwendungen, die sind dahingehend "speziell". z.B. weil die Anwendung dan wieder einen neuen Prozess startet und der ursprüngliche wird sofort wieder beendet. Oder weil der Aufruf über einen Dienst o.ä. erfolgt. Und die Fotoanzeige ist so ein letzterer.
E.
objProcess.CommandLine gibt Dir nicht den Fensternamen oder -titel. Sondern, wie der Name schon sagt, die Kommandozeile, welche ausgeführt wurde, um diesen Prozess zu starten.
Es gibt Anwendungen, die sind dahingehend "speziell". z.B. weil die Anwendung dan wieder einen neuen Prozess startet und der ursprüngliche wird sofort wieder beendet. Oder weil der Aufruf über einen Dienst o.ä. erfolgt. Und die Fotoanzeige ist so ein letzterer.
E.
Zitat von @goodbytes:
Da hab ich also keine Chance irgendwie an die geöffnete(n) Datei(en) ranzukommen zwecks schließen?
Powershell-EinzeilerDa hab ich also keine Chance irgendwie an die geöffnete(n) Datei(en) ranzukommen zwecks schließen?
get-process * | ?{$_.MainWindowTitle -like '*Test1.jpg*'} | %{$_.Kill()}
Set objWord = CreateObject("Word.Application")
For Each t In objWord.Tasks
If InStr(1, t.Name, "Test1.jpg", vbTextCompare) > 0 Then
t.Close()
End If
Next
objWord.Quit