garciam
Goto Top

Programm beenden

Hallo zusammen

Ich habe ein Problem, bei dem ich nicht weiterkomme...

Ich muss ein Programm zu einer bestimmten Zeit schliessen lassen. Dafür will ich ein Script per Aufgabenplanung täglich ausführen lassen. Versucht habe ich es mit Powershell:

get-process prowin32 | %{ $_.closemainwindow() }
Get-Process prowin32 | Stop-Process
Get-Process prowin32 | Kill

Die Varianten funktionieren grundsätzlich alle, jedoch wird bei stop-process und kill der Benutzer gesperrt. Bei closewindow steht leider die Abbrechen-Box im Weg. Ich kann also nicht einfach den Prozess abschiessen oder das Fenster schliessen, ich müsst den "Abbrechen" Button per Script betätigen können. Geht das und wie stellt man das am besten an?

ecee300cb35afb8c7e17cef0abe58de9

Vielen Dank für eure Hilfe!

Gruss

Content-ID: 242896

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

Alex-123
Alex-123 07.07.2014 um 16:03:06 Uhr
Goto Top
Hi garciam,

hab da mal ein kleines VBScript gebastelt.

Ich nehme an das zu beendende Programm heisst PROWIN32.EXE ???

Ich hoffe ich konnte dir weiterhelfen.

Bei Fragen immer her damit ;)

VG Alex

Set oWsh = CreateObject("WScript.Shell")   
	oWsh.Run("cmd.exe /c " & chr(34) & "taskkill /f /im prowin32.exe" & chr(34))  

msgbox"Das geöffnete Programm wurden beendet!",vbCritical,"Programm beenden"	  
garciam
garciam 07.07.2014 aktualisiert um 16:10:38 Uhr
Goto Top
Hallo Alex

Danke für deinen Vorschlag, aber dein VBScript killt den Prozess und somit wird der User gesperrt. Das Programm müsste über "Abbrechen" beendet werden können.

Gruss
garciam
colinardo
Lösung colinardo 07.07.2014, aktualisiert am 08.07.2014 um 13:49:05 Uhr
Goto Top
Moin,
wenn das Ding so besch... programmiert ist dann wirst du wohl über Sendkeys gehen müssen um den Abbrechen Button zu betätigen (dazu muss aber jemand angemeldet sein wenn das Script läuft)
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
get-process prowin32 | %{
$_.closemainwindow()
# Fenster in den Fokus bringen
[Microsoft.VisualBasic.Interaction]::AppActivate($_.Id)
# 0,5 Sekunden pausieren das das Fenster in den Vordergrund kommen kann
sleep -milliseconds 500
# ALT-C drücken um den Abbrechen-Button zu betätigen
[System.Windows.Forms.SendKeys]::SendWait('%c')  
}
Wenn das nicht hinhaut nehme AutoIT dafür.

Grüße Uwe
garciam
garciam 08.07.2014 aktualisiert um 14:47:29 Uhr
Goto Top
Hallo Colinardo

Dein Script funktionierte leider nicht, aber mit AutoIT hab ich es hinbekommen. Danke für den super Tipp.

CloseScanImport()

Func CloseScanImport()

    ; Wait 10 seconds for the window to appear.
    Local $hWnd = WinWait("[CLASS:ProFrame]", "", 10)  

    ; Send a mouse click to the edit control of ScanImport using the handle returned by WinWait.
    ControlClick($hWnd, "", "Button1")  

    ; Wait for 2 seconds.
    Sleep(2000)

    ; Close the ScanImport window using the handle returned by WinWait.
    WinClose($hWnd)
EndFunc   ;==>CloseScanImport

Gruss
garciam