Hallo, Ihe alle,
in meinem Script (unten beigefügt) starte ich den Windows Explorer mit Run() und lasse mir die PID via Rückgabewert übergeben.
Dieser Rückgabewert soll dazu dienen, den speziellen Prozess mittels ProzessClose(#ID) wieder zu schließen.
Zu meinem großen Erstaunen stellte ich fest, dass der Prozess nicht geschlossen wird. Bei der Fehleranalyse fiel mir auf, dass PID, ermittelt durch Run(), und die im Taskmgr ausgewiesene PID nicht identisch sind. Ich habe dafür keine Erklärung, bin auch nicht so der Profi vor dem Herrn.
Vielleicht kann mir jemand erklären, wie es dazu kommen und wie ich die richtige PID zum Weiterbenutzen ermitteln kann.
Hier der Code:
AutoIt
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\..\Icons\Burning.ico
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <Constants.au3>
#include <WinAPI.au3>
Opt("TrayIconDebug", 1)
Opt("WinWaitDelay", 500)
Opt("WinTitleMatchMode", 2)
Local $folder = "Burning", $width = 450, $hight = 450
Local $hGui = GUICreate($folder, $width, $hight), $msg, $hDll = DllOpen("user32.dll")
Local $hPid = Run(@WindowsDir & "\explorer.exe /N, " & @HomeDrive & @HomePath & "\DeskSub\" & $folder, "", @SW_HIDE)
#cs
Die ermittelte PID in $hPid stimmt nicht mit der im Taskmgr ausgewiesenen PID für diesen Process überein
#ce
WinWait("[CLASS:CabinetWClass]", "", 5)
Local $hChild = WinGetHandle("[CLASS:CabinetWClass]", "")
_WinAPI_SetWindowLong($hChild, -20, $WS_EX_TOOLWINDOW)
$NEXSTYLE = DllCall($hDll, "int", "GetWindowLong", "hwnd", $hChild, "int", 236)
DllCall($hDll, "int", "SetWindowLong", "hwnd", $hChild, "int", 236, "int", BitOR($NEXSTYLE[0], $WS_EX_MDICHILD))
DllCall($hDll, "int", "SetParent", "hwnd", $hChild, "hwnd", $hGui)
WinActivate($hChild)
Send("{F11}")
Sleep(100)
WinMove($hChild, "", 0, 0, $width, $hight)
GUISetState(@SW_SHOW, $hGui)
WinSetState($hChild, "", @SW_SHOW)
WinActivate($hGui)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Sleep(10)
WEnd
DllClose($hDll)
GUIDelete($hGui)
ProcessClose($hPid) ; Diese Funktion führt nicht zu dem gewünschten Resultat
Exit
Alles anzeigen
Vielen Dank schon mal vorab.