goodbytes
Goto Top

Fenstername von Prozess anzeigen lassen (vbs)

Hallo,
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! face-smile
Torsten

Content-Key: 292816

Url: https://administrator.de/contentid/292816

Printed on: April 18, 2024 at 12:04 o'clock

Member: emeriks
emeriks Jan 12, 2016 updated at 11:57:14 (UTC)
Goto Top
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.
Member: goodbytes
goodbytes Jan 12, 2016 at 12:05:08 (UTC)
Goto Top
Mmm, sowas in der Art habe ich schon befürchtet...
Da hab ich also keine Chance irgendwie an die geöffnete(n) Datei(en) ranzukommen zwecks schließen?
Mitglied: 114757
114757 Jan 12, 2016 updated at 12:36:42 (UTC)
Goto Top
Zitat von @goodbytes:
Da hab ich also keine Chance irgendwie an die geöffnete(n) Datei(en) ranzukommen zwecks schließen?
Powershell-Einzeiler
get-process * | ?{$_.MainWindowTitle -like '*Test1.jpg*'} | %{$_.Kill()}  
oder mit VBS z.B.
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
Gruß jodel32