RegRead() liefert nichts zurück / WinRAR-API?

  • Guten Abend,

    wieder einmal gibt es ein neues Problem. Ich versuche in der Registry den aktuellen Usernamen rauszufinden.

    Das mache ich mit folgender Codezeile:

    [autoit]

    $UserName = RegRead("\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName")

    [/autoit]

    Der Registryschlüssel stimmt, trotzdem liefert die Funktion nichts zurück? Wisst Ihr wo der Fehler liegt? :S

    Außerdem gleich noch eine zweite Frage:

    Das Googlen nach einer WinRAR-API führte nicht wirklich zu einem zufriedenstellenden Ergebnis daher meine Frage:

    Gibt es eine Möglichkeit Dateien zu packen ohne dafür extra ein Packprogramm aufrufen zu müssen? Außerdem sehe ich jetzt auch keine Möglichkeit WinRAR die nötigen Informationen (Pfad, Zielspeicherort) per ControleSend() zu senden. Da ich mich erst seit gestern (erneut) mit AutoIT beschäftige gibts da bestimmt noch Sachen die ich nicht weiß 8o

    Einmal editiert, zuletzt von CrazyAutoIT (24. Juni 2013 um 17:31)

  • Zu RegRead : Wozu der erste ' \ ' ?

    EDIT:
    und evtl.:

    Zitat

    Falls bei einem 64-Bit Windows auf die speziellen Einträge des 64-Bit Systems zugegriffen werden soll, muss dem Begriff HK... das Suffix 64 angehängt werden (z. B. HKLM64).


    "Zitat aus Hilfe"

  • 1. Ich bezweifle das der RegKey stimmt, denn in Local_Machine werden keine userspezifischen sondern globale für den Computer notwendige und alle User gültige Informationen gespeichert. Der Key "defaultusername" im Zweig "Winlogon" dürfte der Benutzername des Standardbenutzers sein, welcher automatisch angemeldet wird. Das muss aber nicht zwingend der aktuell angemeldete User sein der das Script ausführt.
    2. Wie schon erwähnt ist da ein "\" der da nicht hingehört.
    3. Gibt es ein Autoit Makro um den aktuell angemeldeten Benutzernamen auszulesen:

    [autoit]

    @username

    [/autoit]
  • Zitat

    Gibt es ein Autoit Makro um den aktuell angemeldeten Benutzernamen auszulesen:

    Das wusste ich z.B. nicht, damit hat sich das Problem gelöst. Bleibt noch das mit der WinRAR-API...Habt ihr da ne Idee wie ich auf das Programm zugreifen kann?

  • Lies die Hilfe von winrar, wenn du es benutzen willst. Winrar kann wie viele Programme per cmdline Parameter völlig ohne GUI benutzt werden, wenn ich mich recht erinnere. Du könntest Alternativ auch die 7zip exe oder dll verwenden. 7zip hätte den Vorteil, dass es nicht kostenpflichtig ist, nicht zwingend installiert werden muss und ebenfalls per cmdline Parameter verwendet werden kann. Neben diesen externen Programmen kann man aber auch die Windowseigene ZIP Funktion automatisieren, am besten suchst du per google oder Forensuche nach den verfügbaren Alternativen, das wurde sowohl hier als auch im englischen Forum zu genüge behandelt.

    Die Suchbegriffe "autoit zip UDF" und "autoit rar UDF" sollten da auf jedenfall brauchbares liefern.

  • Gibt es eine Möglichkeit Dateien zu packen ohne dafür extra ein Packprogramm aufrufen zu müssen?


    Die Windows API bietet genau diese Funktionalität, und das ohne dass man irgendwas automatisieren muss: ZIP - Packen / Entpacken mit Windows eigener Funktion


    7zip hätte den Vorteil, dass es nicht kostenpflichtig ist, nicht zwingend installiert werden muss und ebenfalls per cmdline Parameter verwendet werden kann.

    Die CUI Version von WinRAR auch nicht.

  • Ah danke, hat mir schon weitergeholfen :)

    Hab mich entschieden das jetzt doch mit 7zip zu machen.

    In der Hilfe von 7-zip steht der Befehl um in der Commandozeile ein Archiv zu erstellen (vorheriges Navigieren in den Installationsordner ist natürlich nötig):

    Zitat

    7z a archive1.zip subdir\

    Das "a" bedeutet das eine Datei zu einem Archiv hinzugefügt werden soll, das Archiv heißt "archive1.zip", die Dateien in den Ordner subdir\ werden zu diesem Archiv hinzugefügt.

    Ich hab das mal ausprobiert (per Hand in der cmd), das war mein Befehl:

    Zitat


    E:\Programme\7-ZIP>7z a C:\Users\Standardbenutzer\Documents\test.zip C:\Users\Standardbenutzer\Documents\test.txt

    Jetzt kommt die Fehlermeldung, dass die Datei nicht gefunden wurde (der Pfad ist richtig und die Datei ist auch da). Das Archiv wird aber erstellt. So, nun zum AutoIT-Teil, mit der Funktion

    [autoit]

    _RunDos()

    [/autoit]

    hab ich versucht das manuelle nachzubilden.

    [autoit]

    _RunDos("E:" & "cd: " & $7ZipPath & "7z a C:\Users\Standardbenutzer\Documents\test.zip " & "C:\Users\Standardbenutzer\Documents\test.txt")

    [/autoit]

    Der Inhalt der Variable $7ZipPath ist ganz einfach der Installationsordner von 7zip. Es tut sich aber gar nichts, es wird auch kein Archiv erstellt. Die Funktion gibt 1 zurück, was darauf hindeutet das da irgendwas schief gelaufen ist...Habt ihr ne Idee?

  • Ups, okay. Wenn es das alles schon gibt :)

    Ich hab mir mal die Windows-Interne Funktion angeschaut und hab das mal so eingebaut:

    [autoit]

    _BuildInZIP("C:\Users\Standardbenutzer\Documents\test.txt", "test.txt", False, 0, False)

    [/autoit]

    Passieren tut aber nichts :(

  • Lesen muss man können. Schau dochmal in die Funktionsbeschreibung.

    [autoit]

    _BuildInZIP(@DesktopDir & "\Test.zip", @DesktopDir & "\Test.txt")

    [/autoit]
  • Ich kann lesen und ich hab mir auch die Funktionsbeschreibung durchgelesen, allerdings hab ich die nicht so ganz verstanden :S

    Habs jetzt mal nach deiner Vorgabe probiert, ein Archiv wird erstellt leider ist in dem Archiv aber keine Textdatei:

    [autoit]

    _BuildInZIP("C:\Users\Standardbenutzer\Documents\test.zip", "C:\Users\Standardbenutzer\Documents\test.txt")

    [/autoit]
  • [autoit]

    _BuildInZIP("C:\Users\Standardbenutzer\Documents\test.zip", "C:\Users\Standardbenutzer\Documents\test.txt", False, 0)

    [/autoit]
  • Funktioniert auch ohne das False und die 0, aber du glaubst nicht was der Fehler war, ich hab die Datei ausversehen "test.txt" genannt, damit ergibt das mit der Dateieendung einen Gesamtnamen von "test.txt.txt" :pinch:

    Danke :)