1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Schokolade

Beiträge von Schokolade

  • Umlaute aus ini Datei auslesen

    • Schokolade
    • 9. Mai 2016 um 16:40

    Hallo zusammen,
    ich habe eine ini Datei, die ich mittels IniRead und IniReadSection auslese. Nun kommte es immer öfter vor, dass in dieser ini Datei Begriffe mit Umlauten (ä, ö, ü, ß) auftauchen. Wenn ich z.B. mittels IniReadSection eine ganze Sektion auslese und mir das Array anzeigen lasse, werden die Umlaute nicht korrekt angezeigt. Dementsprechend arbeitet das Programm dann ja mit diesen falschen Werten weiter.

    Ein Beispiel:
    In der ini Datei stehen in der Sektion "Alte Versionen" alte Word-, Excel- & Powerpoint-Vorlagen, die mal bei allen Usern verteilt wurden und nun nicht mehr gültig sind und gelöscht werden sollen:

    [Alte Versionen]
    1. = Übungsvorlage01.dotm
    2. = Heiße_Tips.potx
    ...

    AutoIt
    Dim $aLoeschListe = IniReadSection($sDateiConfig, "Alte Versionen")
    Dim sZielpfad = @AppDataDir & "\Microsoft\Templates\"
    For $i = 1 To $aLoeschListe[0][0]
    		Local $vDelError = FileDelete($sZielpfad & $aLoeschListe[$i][1])
    		If $vDelError = 1 Then
    			_FileWriteLog($sLog,"Datei gelöscht: " & $sZielpfad & $aLoeschListe[$i][1])
    		EndIf
    Next

    Danke für eure Hilfe
    :)

  • _Timer_GetIdleTime userunabhängig

    • Schokolade
    • 31. März 2016 um 11:36

    Das ist nett vielen Dank aber nur kein Stress ;)
    Muss auch kein riesen langer Quelltext sein, einfache Worte a la probier mal dies und jenes sind mir eh lieber. Irgendwie fällt es mir schwer, mich in (fremde) Quelltexte einzudenken bzw. diese zu verstehen, man nehme nur mal die Beispiele aus der AutoIt Hilfe :/

  • _Timer_GetIdleTime userunabhängig

    • Schokolade
    • 31. März 2016 um 08:27

    Hallo Bioshade, hallo autoBert,

    erst einmal vielen Dank für eure ausführlichen Antworten und Vorschläge! :thumbup:

    Zitat von Bioshade

    Statt das Script in den Autostart eines Nutzers zu schieben könntest du es in den HKLM Schlüssel dafür schieben. (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run)

    Das ist doch das gleiche wie wenn ich das Skript in den Autostartordner aller Benutzer lege, oder? Das habe ich schon probiert - dann läuft das Skript mehrfach und sobald eine dieser Instanzen dann die Leerlaufzeit erreicht (also die Instanz des Benutzers, der gerade nicht am Rechner arbeitet), schaltet diese in den Energiesparmodus.

    Ich verstehe nich so recht, wie ihr das meint mit der Kommunikation der Skripte. Problem ist, dass User A sich anmeldet, etwas arbeitet und dann den Rechner sperrt (sich nicht abmeldet). Dann meldet sich User B an und arbeitet. Das Skript unter User A läuft weiter und misst dessen Leerlaufzeit.

    Wie soll man das denn prüfen, ob User A den Bildschirm gesperrt hat und das Skript dann entspr. pausieren? Immer nur Skript aktivieren, wenn Bildschirm gesperrt ist geht nicht, denn es kommt auch vor, dass der User den Bildschirm nicht sperrt und weggeht.

    Ich dachte die einfachste Lösung ist es, sämtliche Maus- und Tastaturaktivitäten des Rechners (unabhängig ob ein User angemeldet ist oder nicht) zu monitoren.


    Am Rande: Mit Energiesparmodus meine ich die Möglichkeit, wie sie auch im Startmenü als "Energie sparen" verfügbar ist, also den Rechner auszuschalten und mit einer Grundspannung (knapp 6 Watt) zu versorgen, um beim Wackeln an der Maus oder beim Druck einer beliebigen Taste sofort wieder beim Anmeldebildschirm zu sein. Ich habe lange nach einer Lösung gesucht und es letztlich so gelöst:

    AutoIt
    Dim $sBefehlPSShutdown = "psshutdown.exe -d -t 5 >>" & $sDateiLogName
    Run(@ComSpec & " /c " & $sBefehlPSShutdown, @ScriptDir, @SW_HIDE)
  • _Timer_GetIdleTime userunabhängig

    • Schokolade
    • 30. März 2016 um 20:26

    Hallo zusammen,
    ich habe ein kleines Skript geschrieben, welches alle X Minuten die Leerlaufzeit prüft (Funktion _Timer_GetIdleTime). Wenn eine bestimmte Zeit erreicht ist, prüft es mittels CMD Befehl netstat, ob ein bestimmtes Gerät gerade eine Verbindung zum Rechner hergestellt hat. Wenn ja, mache nix sondern gehe wieder zur Prüfschleife und wenn keine Verbindung vorhanden ist, schalte den Rechner in den Energiesparmodus.

    Hintergrund: Auf dem Rechner läuft ein Mediaserver und wenn gerade ein Fernseher oder ein Smartphone eine Verbindung offen hat, soll er natürlich nicht ausgehen. Klappt soweit ganz gut. Aber....
    Das Skript liegt im Autostart des standardmäßig angemeldeten Users A. Wenn dieser nun angemeldet ist und sich zudem ein weiterer User B anmeldet, wird der User B mitten in seiner Arbeit vom Energiesparmodus überrascht, da die Funktion _Timer_GetIdleTime leider nur die Leerlaufzeit des Users ermittelt, der das Skript ausführt. Es müsste aber die Leerlaufzeit (also keine Maus- und Tastatureingaben) des gesamten Systems prüfen - unabhängig vom User.

    Hat jemand eine Idee, wie man das machen könnte bzw. gibt es eine ähnliche Funktion, die das kann?

    Ich habe schon versucht, das Skript in den Taskplaner zu packen um es userunabhängig beim Systemstart laufen zu lassen, aber da braucht es ja auch die Eingabe von Anmeldeinformationen eines (zur Ausführung berechtigten) Users...

    Besten Dank und süße Grüße,

    Schokolade

  • Checkbox über Bild im Vordergrund

    • Schokolade
    • 24. März 2016 um 17:46

    Super, vielen Dank autoBert :thumbup:

  • Checkbox über Bild im Vordergrund

    • Schokolade
    • 23. März 2016 um 15:51

    Hallo zusammen.
    Wenn ich in einer GUI ein Bild anzeige und über dieses Bild eine Checkbox lege, lässt sich die Checkbox nicht anklicken/checken, obwohl sie über dem Bild liegt und sichtbar ist. Wenn ich sie daneben lege, geht es. Gibt's da einen Trick?

    Also:

    AutoIt
    ; ...
    GUICtrlCreatePic      ( C:\Bild.jpg , 10 , 10 , 100 , 100 )
    GUICtrlCreateCheckbox ( ""          , 10 , 10 ,  15 ,  15 )
    ; ...


    Normalerweise bin ich kein Freund von Fragen a la "Wozu brauchst du das?" und "Warum machst du das nicht so oder so?" usw... :)

    Aber in dem Fall erkläre ich euch mal den Hintergedanken und bin für jeden Kommentar, Hinweis, Tipp etc. zum Thema dankbar, da ich mit dem Programm/Projekt noch relativ weit am Anfang stehe und wer weiß, vielleicht muss ich das Rad ja nicht neu erfinden

    Hintergrund: Ich möchte ein Programm schreiben, welches einen bestimmten Pfad ausließt und alle Bilder aus diesem Pfad mit einer Checkbox zusammen als eine Art Miniaturansicht anzeigt, sodass einzelne Bilder ausgewählt werden können und anhand der Auswahl dann mit den gewählten Bildern weiter gearbeitet werden kann.
    Z.B. Alle Bilder des Ordners F:\DCIM\ einer Kamera-Speicherkarte anzeigen, dass der User bei den gewünschten Bildern Häkchen setzen kann. Die entspr. Pfad- & Dateinamen der ausgewählten Bilder sollen dann weiter verarbeitet werden, in welcher Form auch immer - z.B. an IrfanView übergeben werden zwecks Autokorrektur oder Umbenennung, Duplizierung etc...

    Bevor die Frage aufkommt: FileOpenDialog verwende ich nicht, weil das Programm Anwender als Zielgruppe hat, denen die Mehrfach-Selektion mittels STRG oder SHIFT und gleichzeitiges Scrollen durch alle Bilder beinahe unmöglich beizubringen ist bzw. sich in der Vergangenheit gezeigt hat, dass das angeblich verstanden wurde und dann doch Bilder fehlten usw... :D

    Besten Dank und süße Grüße

    Schokolade

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 22. Februar 2016 um 10:24

    Hallo zusammen, besten Dank für all eure Antworten, Tipps etc.

    Ich habe es jetzt so gelöst wie misterspeed vorgeschlagen hat:
    - Alle User dürfen den Log-Ordner + Unterordner lesen/auflisten
    - ERSTELLER-BESITZER darf Unterordner und Dateien lesen/auflisten/Dateien ahängen etc.
    Also kann jeder User das Log-Verz. öffnen, sieht aber nur sein eigenes Logfile (aufgrund der von _mk_ erwähnten Zugriffsbasierten Aufzählung).

    autoBert: Danke auch dir für deine Mühe, aber eben das starten der Commandozeile wäre nur die schlechteste Lösung gewesen, denn ich habe es dann doch schon lieber mit _FileWriteLog bzw. dem eigentlichen Programm selbst lösen wollen, ohne zusätzliche Programme/Commandozeilenbefehle aus dem Progr. zu starten.

    Nochmals vielen Dank und süße Grüße, Schokolade :)

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 20:13

    autoBert:
    Ich habe niemandem die Leserechte genommen, sondern lediglich Schreibrechte vergeben.. So sehen die Rechte der User auf das Logverz. aus:
    2016-02-19_20h04_04.jpg

    Die User können weder das Verz. noch die darin befindlichen Dateien öffnen/auflisten/ansehen, aber darin schreiben (zumindest CMD im Sicherheitskontext des Users).

    >>>du kannst aber auch für jeden Nutzer ein Verzeichnis anlegen auf dem nur er, das System und die Admistratoren alle nötigen Berechtigungen haben.
    Das ist keine Option, denn a) zu aufwendig und b) zu unübersichtlich. Es soll schon so sein, dass in einem Verzeichnis alle Logfiles liegen, sodass man z.B. nach Datum sortieren kann, welches zuletzt geändert wurde.

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 20:01

    >>>dass der "ERSTELLER-BESITZER" einer Datei zusätzlich Lese Rechte erhält. Dadurch dürften nur selbst erstelle Dateien lesbar sein.
    Das ist ein interessanter Ansatz, dann könnten die User wenigstens keine Logs der anderen User sehen. Werde ich mal probieren.

    >>>Du hast weder ein funktionierendes Beispiel Batch Script bereitgestellt
    Wie das Batchfile exakt aufgebaut ist, ist meiner Ansicht nach ja auch irrelevant. Es erledigt div. Aufgaben (u.a. Kopieren diverser Vorlagen Dateien) und schreibt dann mittels echo das Logfile, z.B.

    Code
    echo %date% %time% Das ist passiert. >>\\Pfad\Verz\Logdatei.log

    >>>wie und in welchem Benutzer Kontext die Batch- und Autoit Scripte ausgeführt werden

    Die Skripte werden mittels Gruppenrichtlinie als Logon- und Logoff-Skripte im Sicherheitskontexst des jeweils angemeldeten Benutzers ausgeführt.

    >>>keine Angaben zu den involvierten Betriebssytem- und Autoit Versionen gemacht.
    Windows 7 Professional SP2, meist 64, vereinzelt 32 Bit Versionen. AutoIt Version ist v3.

    >>>Angaben dazu ob die Benutzer lokale Administratoren sind
    Einige User sind lokale Admins, andere nur Benutzer, war bisher bei Verwendung der Batchskripte aber irrelevant. Die Skripte sollen z.B. Netzlaufwerke verbinden, E-mail-Signaturen, Wordvorlagen etc. ins Userverzeichnis kopieren usw. Also keine Aktionen, die das lokale System ändern wie Installationen o.Ä.....

    >>>welche lokale Antivirensoftware eingesetzt wird.
    Die Antivirensoftware ist von Standort zu Standort verschieden - auch hier wüsste ich nicht, in wie fern das Einfluss auf die NTFS Rechte bzw. die Tatsache, dass AutoIt eine Datei zwingend erst lesen/öffnen muss anstatt einfach nur (wie CMD) anzuhängen, hat.


    Mal allgemein gefragt: Wie würdet ihr das denn lösen, wenn die Vorgaben wie folgt lauten?
    - Ein zentrales Verzeichnis für Logfiles
    - Ein Logfile je User (in das die verschiedenen Skripte dann ihren Skriptnamen und die durchgeführten Operationen + Datum und Uhrzeit reinschreiben)
    - Log-Verzeichnis soll für die User nicht sichtbar bzw. der Inhalt nicht einsehbar sein (Stichwort Datenschutz)

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 19:27

    >>>Kannst du den in einem Verzeichnis auf das du nur Schreibrechte hast mit NotePad schreiben?
    Naja, wie soll das gehen? Wenn ich Notepad öffne und die Datei speichern will, muss ich ja in das Zielverzeichnis navigieren. Wenn ich als Dateiname den direkten Pfad angebe, meckert Notepad, dass der Pfad nicht verfügbar ist.
    Mit CMD und klappt es problemlos:

    Code
    ECHO test >>\\ZIELPFAD\OHNE_LESE_RECHTE\test.txt

    Zur Not müsste ich die Logs mittels @Comspec in Komb. mit @SW_HIDE schreiben aber das ist ja auch wieder von hinten durch die Brust ins Auge...

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 18:57

    Hallo misterspeed, vielen Dank für deine Ausführungen.

    >>>Wenn er das macht kann aber jeder alle Logs lesen. Das einzige was man dazu braucht ist der komplette Netzwerkpfad zur Datei.
    Genau, wie ich eben schon in meiner Antwort geschrieben habe.

    >>>Da die Logfiles mit Sicherheit nach einem fixen Schema benannt sind dürfte es nicht all zu schwer sein auf den Namen von fremden Logfiles zu schließen.
    Richtig ;)

    Die Logfiles lokal zu hinterlegen habe ich auch schon überlegt, finde ich aber nicht gut (Rechner des Users aus = Logfile nicht zugänglich).
    Die Logfiles lokal "zwischenzuparken" und dann in das entspr. Verzeichnis zu schieben (mit einem separaten Useraccount) wäre eine Alternative, wenn auch sehr umständlich:
    Logfile auf C:\ schreiben -> Skript fertig -> Logfile-Inhalt an entspr. vorh. Logfile im Zielverz. anhängen -> Logfile auf C:\ löschen

    Gibt es vielleicht eine Möglichkeit, die Funktion _FileWriteLog innerhalb des Skripts mit einem anderen Benutzer aufzurufen?

    Ich verstehe nicht, warum die Batchskripte das problemlos gemacht haben, es aber nicht mit AutoIt realisierbar ist (ohne was an den Berechtigungen zu ändern)? :(

    Es muss ja nicht _FileWriteLog sein, gibt es vielleicht andere Funktionen, mit denen man Datum, Uhrzeit + indiv. Text in eine Datei schreiben kann, die man ausprobieren könnte?

    PS: Das mit dem Logserver scheint mir mit Kanonen auf Spatzen zu schießen.

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 18:45

    Hallo Kanashius, danke für deine Antwort :)

    >>>da Quellcode fehlt
    Wozu Quellcode? _FileWriteLog mit dem Zielpfad, auf den die entspr. User nur Schreibrechte haben.

    >>>Sonst wären Berechtigungen ja unnütz.
    Gut erkannt - deshalb arbeite ich ja mit den Berechtigungen und habe sie so konfiguriert, dass der User eben nicht im Verz. lesen (Dateien anschauen etc.), sondern nur schreiben (loggen) kann. ;)

    Hallo _mk_, auch dir Danke für deine Antwort :=)
    Ich bin nciht mehr im Büro und probiere das Montag gleich mal aus. Aber wenn ich mich nicht irre, könnte ein findiger User mit diesen Berechtigungseinstellungen doch problemlos z.B. via Kommandozeile gezielt Logs öffnen (zwar nicht das Verzeichnis öffnen und Dateien auflisten, aber mit dieser Berechtigung die Dateien lesen)..??..

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 12:07

    Ich habe es mal mit FileWrite probiert - gleiches Problem, Rückgabewert 0 (file not opened in writemode, file is read only, or file cannot otherwise be written to).

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 11:46

    Hallo autoBert,

    danke für den Tipp. Aber den 3. parameter habe ich nicht verwendet. Habe ihn jetzt testhalber mal genutzt und auf -1 gesetzt - leider ohne Erfolg.

  • _FileWriteLog kann keine Logfiles schreiben ohne Datei zu öffnen

    • Schokolade
    • 19. Februar 2016 um 10:51

    Hallo zusammen,

    ich bin neu hier im Forum und auch neu bei AutoIt und hoffe, ihr könnt mir weiterhelfen.

    Gegeben ist eine Serverfreigabe auf einem Windows Server 2008. In dieser Freigabe liegen div. Verzeichnisse, auf die die User zugreifen können, mal nur lesend, mal lesend und schreibend (z.B. Z:\Treiber\, Z:\Datenaustauch\ usw.)...
    Es gibt auch ein Verzeichnis für Logfiles, in dem je User Logfiles angelegt werden, z.B. von Loginscripten (Bsp.: Z:\Logfiles\AMustermann.log).
    Auf dieses Verzeichnis LOGFILES haben die User allerdings nur Schreibrechte (also nicht die NTFS-Berechtigung "Ordner auflisten/Daten lesen"), so dass sie das Verzeichnis nicht öffnen bzw. die darin befindlichen Dateien nicht anzeigen können. Hintergrund ist der Datenschutz (z.B. soll Herr Müller nicht am Logfile von Herrn Meier erkennen können, wann dieser sich ein- und ausloggt etc.)

    Bisher haben Batch-Skripte dort ihre Logfiles abgelegt - ohne Probleme. Nun möchte ich die Batch-Skripte durch Programme ersetzen, die ich mit AutoIt optimiere, womit ich zu meinem problem komme:

    Die Funktion _FileWriteLog kann ihr Logfile nicht schreiben, da sie es nicht finden/öffen kann (Rückgabewert 0 und @error-Wert 1), weil dem ausführenden User ja die Berechtigungen zum Anzeigen/Auflisten/Öffnen/... fehlen.

    Hat jemand eine Idee, das umzusetzen, ohne die Berechtigungen anzupassen? Ich bin für jeden Tipp dankbar :)

    Besten Dank und süße Grüße, die Schokolade <3

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™