Uncheck checkbox und Admin File löschen

  • Hallo liebe Leute

    Ich habe wieder einmal zwei kleine Probleme.

    [autoit]

    ControlCommand("[TITEL:Setup; CLASS: TWizardForm]", "", "[CLASS:TNewCheckListBox; INSTANCE:1]", "UnCheck")

    [/autoit]

    Mit diesem Kommand habe ich versucht in einem Setup eine Checkbox abzuwählen. Leider klappt das nicht. Wahrscheinlich, weil das Fenster um die Checkbox zu gross ist, also mit Au3info wird nicht nur die Checkbox, sondern ein grösserer Bereich um die Checkbox ausgewählt, der aber nur die Checkbox enthält.

    Wie kann ich sonst noch die Checkbox deaktivieren? Ich dachte da an, ControlClick, allerdings müsste ich dann die x- und y-Koordinaten angeben, da es ja nicht in der Mitte ist. In der Hilfe steht:

    Zitat

    [optional] Die x-Position, innerhalb des Steuerelements, die geklickt werden soll. Standard ist die Mitte

    Bezieht sich nun die x- und y-Position auf den gesamten Bildschirm oder nur relativ zur Mitte des Fenster? Und wenn nur relativ zur Mitte wie berechne ich das?


    Nun zur zweiten Frage. Ich würde gerne eine Datei mit FileDelete löschen, allerdings habe ich nur Benutzerrechte und kann sie daher nicht löschen. Wenn ich sie von Hand lösche, dann gehe ich einfach ins Administratorkonto und lösche sie. Wie kann ich das mit Autoit machen?

  • Les doch die Fensterposition aus und rechne dann z.B. 100x und 50y drauf, wenn die Checkbox im Fenster um 100 nach rechts und 50 nach unten verschoben wäre.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Weiss jemand noch eine Antwort zur zweiten Frage wegen dem Löschen von Files bzw. kann AutoIt irgendwie auch Files löschen, die nur Admins löschen dürfen (Bei Skriptausführung bin ich als Benutzer angemeldet)? Oder ist es sonst irgendwie möglich einen Ordner so zu verändern, dass auch Benutzer die Files löschen dürfen? Handelt sich übrigens um Files in einem Ordner in C:\Programme\... und ich habe Win XP Prof.

    [autoit]

    "[TITEL:Setup; CLASS: TWizardForm]"

    [/autoit]

    Das ist das Fenster.

    [autoit]

    "[CLASS:TNewCheckListBox; INSTANCE:1]"

    [/autoit]

    Das ist ein Teil des Fensters, indem sich die Checkbox befindet. Die Checkbox befindet sich da im linken, oberen Eck.

    Also bei ControlCommand kann ich ja keine Koordinaten übergeben. Da müsste ich ControlClick verwenden. Nehmen wir einmal an, dass das Teil des Fenster indem sich die Checkbox befindet die Koordinaten x= 50 und y = 50 hat. Die Koordinaten der Checkbox sind z.B. x = 60 und y = 60. In der Hilfe zu ControlClick steht nun, dass immer in die Mitte geklickt wird. Wenn also x = 60 und y = 60 im linken, oberen Eck ist, was muss ich dann für Koordinaten ControlClick übergeben? Eigentlich müsste ich ja von der Mitte Pixel abziehen.

  • Hab jetzt nicht den ganzen Thread gelesen, aber bei ControlClick würde ich sagen, dass die Position [0,0] links oben ist und die Mitte dann [Länge des Controls/2, Höhe des Controls/2].

    Du kannst keine Dateien löschen auf die dein Benutzer kein Recht hat, du kannst aber mit RunAs() Benutzernamen und Passwort eines Administrators übergeben und damit die Dateien löschen.

  • Hallo Helveticus,

    zu 1.: Das Steuerelemnt ist keine übliche Checkbox, sondern eine ListBox in der Einträge an- bzw.abgewählt werden können. Du müsstest also zuerst mit ControlCammnad den Befehl SetCurrentSelection absetzen damit der Eintrag angewählt wird. (ist aber nur eine Vermutung, musst du selbst testen) Evtl. hilft dir auch ControlListview weiter, dazu wäre es aber Bedingung das TNewCheckListBox von TListview abstammt.
    zu 2.: stelle #RequireAdmin an den Anfang deines Skriptes, dann sollte es nach der Passwortabfrage klappen,

    mfg autoBert

  • Vielen Dank. Ich werde das zu 1 so versuchen wie autoBert gesagt hat.

    Zitat

    zu 2.: stelle #RequireAdmin an den Anfang deines Skriptes, dann sollte es nach der Passwortabfrage klappen,

    Nicht das ganze Skript braucht Admin Rechte, sondern nur ein kleiner Teil. Möchte daher nicht dem gesamten Skript Admin Rechte geben.

    Zitat

    Du kannst keine Dateien löschen auf die dein Benutzer kein Recht hat, du kannst aber mit RunAs() Benutzernamen und Passwort eines Administrators übergeben und damit die Dateien löschen.

    Wie kann ich denn mit RunAs Dateien löschen?

  • Vielen Dank, werde auch das probieren. Die Dateien werden dann wohl in den Papierkorb verschoben. Kann ich auch mit einem DOS-Befehl den Papierkorb leeren? Um den Papierkorb zu leeren gibt es zwar eine AutoIt Funktion, aber eventuell braucht es da dann auch Admin Rechte.

    Zitat

    zu 1.: Das Steuerelemnt ist keine übliche Checkbox, sondern eine ListBox in der Einträge an- bzw.abgewählt werden können. Du müsstest also zuerst mit ControlCammnad den Befehl SetCurrentSelection absetzen damit der Eintrag angewählt wird. (ist aber nur eine Vermutung, musst du selbst testen) Evtl. hilft dir auch ControlListview weiter, dazu wäre es aber Bedingung das TNewCheckListBox von TListview abstammt.

    Bei SetCurrentSelection muss man aber auch noch eine occurence übergeben. Was muss ich da angeben?

    Und bei ControlListView muss man "DeSelect", From [, To] angeben und da weiss ich nicht was bei From schreiben.

    2 Mal editiert, zuletzt von Helveticus (7. Januar 2012 um 21:08)

  • So also das Problem mit der Checkbox konnte ich lösen, ich habe es per Image Recognition gemacht. Alles Andere hat nicht funktioniert, war wohl eine wiederspenstige Checkbox. :D

    Der DOS Befehl zum löschen der Datei funktioniert bei mir aber nicht. Ich habe folgenden Code.

    [autoit]

    RunAs("Administrator", @ComputerName, "password", 1, @ComSpec & " /c " & "del " & @ScriptDir & "\Data\test.exe")

    [/autoit]

    Die Datei wird nicht gelöscht. Wenn ich /c weglasse, dann wird die cmd ja nicht geschlossen und befindet sich dann einfach in C:\Windows\System32, eine Fehlermeldung erscheint nicht. Wenn ich den obigen Befehl printe dann lautet er "C:\Windows\System32\cmd.exe /c del C:\......\test.exe".

    Was habei ch jetzt falsch gemacht?

    Einmal editiert, zuletzt von Helveticus (8. Januar 2012 um 00:19)