Nur ne kleine Frage

  • Nabend

    Wollte nur kurz fragen, ob es möglich ist, in auto it, über einen Prozess, den Pfad zu dem Programm herraus zu finden.

    Also ich wähle über ProcessList einen Prozess aus und dann steht in einem GUI-Input der Pfad zu dem Programm.


    MfG

  • ich denke dass könnte helfen:
    Link

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Mist, brauch doch nochmal hilfe ^^

    Ich weis nicht genau, wie ich das in mein script einbauen soll.

    Hier mal mein script, die udf liegt bei:

    Spoiler anzeigen
    [autoit]

    If Not IsAdmin () Then
    MsgBox (16, "Error", "Achtung, es wurden keine Admin-Rechte bei Ihnen erkannt!" & @CRLF & @CRLF & "Bitte melden Sie sich als Admin an." & @CRLF & "Sollten Sie nicht der Besitzer dieses PS's sein," & @CRLF & "so setzen Sie sich bitte mit diesem in Verbindung.")
    Exit
    EndIf
    #include <ProcessGetFilename.au3>
    #NoTrayIcon
    $GUI = GUICreate ("ProzessBlocker", 190, 230)
    GUISetState (@SW_SHOW)
    GUISetBkColor (0xCCF899)
    GUICtrlCreateLabel ("Prozess auswählen/Eingeben.", 10, 13, 200)
    $ProcessInput = GUICtrlCreateCombo ("Auswählen/Eingeben", 10, 30, 150)
    GUICtrlCreateLabel ("Pfad zum Programm auswählen.", 10, 53, 200)
    $PfadInput = GUICtrlCreateInput ("", 10, 70, 120)
    GUICtrlCreateLabel ("Passwort zum starten eingeben.", 10, 93, 200)
    $StartInput = GUICtrlCreateInput ("", 10, 110, 150)
    GUICtrlCreateLabel ("Passwort zum beenden eingeben.", 10, 133, 200)
    $EndInput = GUICtrlCreateInput ("", 10, 150, 150)
    $OK = GUICtrlCreateButton ("OK", 40, 190, 40)
    $Exit = GUICtrlCreateButton ("Exit", 90, 190, 40)
    $PfadSearch = GUICtrlCreateButton ("...", 130, 70, 30, 20)
    $allprocess = ProcessList()
    For $i = 1 to $allprocess[0][0]
    GUICtrlSetData ($ProcessInput, $allprocess[$i][0], "Auswählen/Eingeben-")
    Next
    ; -----
    HotKeySet ("^!{q}", "_Start")
    HotKeySet ("^!{w}", "_End")
    ; -----
    Func _Start ()
    $pwStart = GUICtrlRead ($StartInput, 1)
    $Pfad = GUICtrlRead ($PfadInput, 1)
    $PwInput1 = InputBox ("Bitte Passwort eingeben", "Bitte gib hier nun das Passwort ein, um das Programm zu starten.", "", "*")
    If $PwInput1 = $pwStart Then
    Run ($Pfad)
    Else
    $Msg1 = MsgBox (4+16, "Error", "Das Passwort wurde falsch eingegeben." & @CRLF & "Erneut versuchen?")
    If $Msg1 = 7 Then
    _While ()
    Else
    _Start ()
    EndIf
    EndIf
    EndFunc ;==> _Start
    ; -----
    Func _End ()
    $pwEnd = GUICtrlRead ($EndInput, 1)
    $PwInput2 = InputBox ("Bitte Passwort eingeben", "Bitte Passwort zum beenden des Programmes eingeben", "", "*")
    If $PwInput2 = $pwEnd Then
    $Msg3 = MsgBox (4+32, "Beenden", "Wollen Sie das Programm wirklich beenden?")
    If $Msg3 = 6 Then Exit
    Else
    $Msg2 = MsgBox (16, "Error", "Das Passwort wurde falsch eingegeben" & @CRLF & "Erneut versuchen?")
    If $Msg2 = 7 Then
    _While ()
    Else
    _End ()
    EndIf
    EndIf
    EndFunc ;==> _End
    ; -----
    Func _While ()
    While 1
    $Prozess = GUICtrlRead ($ProcessInput, 1)
    If ProcessExists ($Prozess) Then
    ProcessClose ($Prozess)
    EndIf
    If ProcessExists ("taskmgr.exe") Then
    ProcessClose ("taskmgr.exe")
    MsgBox(48, "Achtung", "Taskmager ist gesperrt")
    EndIf
    Sleep (100)
    WEnd
    EndFunc ;==> _While
    ; -----
    Func _Wait ()
    While 1
    $Prozess = GUICtrlRead ($ProcessInput, 1)
    If ProcessExists ($Prozess) Then
    ProcessClose ($Prozess)
    EndIf
    If ProcessExists ("taskmgr.exe") Then
    ProcessClose ("taskmgr.exe")
    MsgBox(48, "Achtung", "Taskmager ist gesperrt")
    EndIf
    WEnd
    EndFunc ;==> _Wait
    ; -----
    While 1
    $nMsg = GUIGetMsg ()
    Select
    Case $nMsg = $OK
    GUISetState (@SW_HIDE)
    AdlibEnable ("_Wait")
    Case $nMsg = $PfadSearch
    GUICtrlSetData ($PfadInput, FileOpenDialog ("Datei auswählen.", @DesktopDir, "Alle (*.*)" ))
    Case $nMsg = $Exit
    If MsgBox (4+32, "Beenden", "Wollen Sie das Programm wirklich beenden?") = 6 Then Exit
    EndSelect
    WEnd

    [/autoit]
  • Am Ende der udf ist ein kleines Beispiel,
    wie der Aufruf aussehen muss.
    pack das einfach in eine Variable und:

    [autoit]

    $pfad = _WinAPI_ProcessGetFilename("svchost.exe",True)

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich hatte es eigl. so gedacht, das wenn man den Prozess aus der Combo gewählt hat, dass dann der Pfad bei $pfadinput eingetragen wird. ändert man den Prozess, so wird der neue pfad wieder dort eingegeben.

    Das is bestimmt mit GUICtrlSetData zu lösen, nur mir will einfach net einfallen, wie ^^

    Ah, moment bin einen Schritt weiter:

    [autoit]


    For $i = 1 to $allprocess[0][0]
    $Prozess = GUICtrlRead ($ProcessInput, 1)
    GUICtrlSetData ($ProcessInput, $allprocess[$i][0], "Auswählen/Eingeben-")
    GUICtrlSetData ($PfadInput, _WinAPI_ProcessGetFilename ($Prozess, True))
    Next

    [/autoit]

    Jetzt steht der pfad bei $PfadInput drin, aber er läst sich net mehr ändern.
    Man brauch wahrscheinlich i.wie ne schleife, die solange geht, bis man eben auf OK drückt... :wacko:

    Einmal editiert, zuletzt von Commander21 (22. März 2009 um 00:41)

  • Na ja,

    in deiner While-Schleife den Event der ComboBox abfragen, wenn auswahl,
    dann den Inhalt an an die udf schicken...

    GuiCtrlSetData($PfadInput, _WinAPI_ProcessGetFilename(GuiCtrlRead(DeineComboBox...),True))

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)