Run mit einer Variable?

  • Hallo, ich habe ein kleines Problem.
    Ich bin daran, ein Programm zu schreiben, bei dem man den Namen des Fensters eingibt, dessen Prozess man will (Also die PID) und dann der Prozess gezeigt wird. Funktioniert aber noch nicht ganz ?( (Notice: Ich bin noch nicht fertig! Aber konstruktive Kritik sind trotzdem gerne gesehen!)
    Das ganze ist auf Englisch. (Wenn noch Grammatikfehler drin sind dann bitte sagen! :)

    [autoit]


    #include
    #include
    #include
    #include
    #include
    #Region ### START Koda GUI section ### Form=c:\users\siemon\autoit\process.kxf
    $Form1_1 = GUICreate("Form1", 460, 103, 257, 150)
    $Gui_Label = GUICtrlCreateLabel("Please type in the full, current window name you want to know the process of.", 24, 16, 371, 17)
    GUICtrlSetFont(-1, 9, 400, 0, "MS Sans Serif")
    $Input1 = GUICtrlCreateInput("", 24, 40, 425, 21)
    $Gui_checkbox = GUICtrlCreateCheckbox("Run Window/Process (important)", 24, 72, 273, 17)
    $Button1 = GUICtrlCreateButton("OK", 336, 64, 113, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Gui_checkbox
    If GUICtrlRead($Gui_checkbox) = $GUI_CHECKED Then Run(GUICtrlRead($Input1))

    [/autoit][autoit][/autoit][autoit]

    Case $Button1
    $proc = WinGetProcess($Input1)
    MsgBox(0, "", "The process you are looking for has the number " & $proc)
    Exit
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

    .
    Der Platz, an dem es hapert, ist hier:

    [autoit]

    Run(GUICtrlRead($Input1))

    [/autoit]


    Ich weiß , dass das nicht richtig ist, da ich bei Run den Pfad angeben muss. Doch wie mache ich das mit einer Variable? Ich kann ja schlecht Run("C:\Program Files\Mozilla Firefox\" & $Input1) machen, da ich ja nicht in der Hand habe um welches Programm es geht.

    Wäre nett wenn mir jemand hilft :)

    EDIT: Moment. Ich glaub ich hab hier nen Denkfehler drin. Ich brauch ja gar keine PID, sondern den Prozessnamen. Weiß jemand, ob es da nen Befehl für gibt?

    4 Mal editiert, zuletzt von Hime (20. Dezember 2010 um 18:37)

  • Hab hier mal schnell eine Funktion zusammengebastelt...

    Spoiler anzeigen

    Func _Process_GetExecutablePath($pid = 0, $hostname = ".")
    $objWMIService = ObjGet("winmgmts://" & $hostname & "/root/cimv2")
    $colProcess = $objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID ='" & $pid & "'")
    For $objProcess In $colProcess
    If $objProcess.ProcessID = $pid Then Return $objProcess.ExecutablePath
    Next
    EndFunc ;==>_Process_GetExecutablePath


    So bekommst du den Pfad zur Anwendung eines Prozesses über die PID ($hostname ist optional). Jetzt hast du den Pfad zur Andwendung und kannst diesen auch mit Run verwenden ;).
    Du musst allerdings auch vorher den Wert des Inputs mit GUICtrlRead auslesen und nicht direkt seine ID verwenden :rolleyes: .