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. Scritch

Beiträge von Scritch

  • Event bei Klick auf ListView-Eintrag

    • Scritch
    • 27. Januar 2014 um 13:14

    Hallo. Ist es möglich ein Event auszulösen wenn ich auf ein ListView-Eintrag einen Klick mache?

  • Ganze Zeile in Array durchsuchen

    • Scritch
    • 30. April 2013 um 11:44

    So, heute bin ich recht schnell zu einer Lösung gekommen. Hier mal nur der Auszug aus dem Skript, den ich soweit geändert habe:

    Spoiler anzeigen
    [autoit]

    for $f = 1 to ubound($array_komplett) - 1 ;In dieser Schleife wird das Druckobjekt verarbeitet, welchen in dem $array_komplett steht.
    $var = 10 ;Diese Variable gibt später einen Wert von einer Schleife zur anderen weiter -> Deklariert wurde sie am Anfang des Skriptes. Dies hier dient nur zum "resetten" der Variable, wenn der Wert verändert wurden wäre

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

    $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$c] ;Weist immer der ersten Spalte im Array die yf-id des PC's zu
    $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$f][1] ;Weist immer der zweiten Spalte im Array die yf-id des Users zu

    for $e = 0 to ubound($druckeruebersicht, 2) - 1 ;Diese Schleif gleicht ab, ob das zu verarbeitende Druckobjekt aus $array_komplett in dem Array $druckeruebersicht bereits vorhanden ist
    if $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] = $array_komplett[$f][4] Then ;Wenn dies der Fall ist dann...
    $var = 100 ;... wird der Wert der Variablen geändert...
    EndIf
    Next

    if $var = 10 Then ;... was bedeutet dass dieses Druckobjekt nur weiterverarbeitet wird wenn der Variablenwert dem Ursprungswert entspricht was wiederum ein Indiz dafür wäre, dass das Druckobjekt aus $array_komplett noch nicht in $druckeruebersicht vorhanden ist
    for $k = 0 to ubound($druckeruebersicht, 2) - 1 ;Ist das Druckobjekt noch nicht vorhanden, so wird mit dieser Schleife geprüft, wo in dem Array (in der aktuellen Zeile) in welcher Spalte noch Platz zum schreiben des neuen Druckobjektes ist.
    if $druckeruebersicht[ubound($druckeruebersicht) - 1][$k] = "" Then ;Hierfür muss der Wert der Zelle leer sein ( "" )
    $druckeruebersicht[ubound($druckeruebersicht) - 1][$k] = $array_komplett[$f][4] ;Wurde eine leere Zelle gefunden, wird das aktuelle Druckobjekt aus $array_komplett in die ensprechende Zelle in $druckeruebersicht geschrieben
    ExitLoop ;und die Schleife verlassen, da sonst im nächsten Schleifendurchlauf der Wert erneut noch in die nächste freie Zelle geschrieben würde
    EndIf
    Next
    EndIf

    Next

    [/autoit]

    Eigentlich ganz einfach :) Danke für eure Bemühungen ;)

  • Ganze Zeile in Array durchsuchen

    • Scritch
    • 29. April 2013 um 21:06
    Zitat von Make-Grafik

    *_* - Sag das doch gleich...
    Dann schreib dir doch ne Funktion?

    Ist nicht so schwer...

    Jap, habe ich auch schon dran gedacht. Hatte vorhin nur irgendwie einen Knoten im Hirn, mache morgen bei der Arbeit weiter :)

    Zitat von Raupi

    Wenn du nix selbst machen willst, dann benutze _Array2DSearch von BugFix, da kannst du nach einem Suchbegriff innerhalb der Arrays suchen, egal in welche Dimension (Spalte) er steht.
    ArrayMore.au3

    Naja, dass ich nichts selber gemacht habe stimmt nicht ganz. Habe da vorhin eine ganze Weile dran gesessen und mir den Kopf zermatert bevor ich hier nach Hilfe gefragt habe ;)

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #Include <File.au3>
    #Include <Date.au3>

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

    dim $druckeruebersicht[2][2]
    Local $var
    yfnrpc()
    ;~ dim $yfnrpc[1] = ["yf7sltpy"]

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

    _arraydisplay($yfnrpc)

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

    for $i = 0 to UBound($yfnrpc) - 1
    $einzulesende_csv = @ScriptDir & "\" & $yfnrpc[$i] & ".csv"
    if FileExists($einzulesende_csv) = 1 Then ;Hier ist das Problem begraben. Ich habe bisher nur eine Testdatei in dem Verzeichnis. Bei jedem Durchgang wird wieder diese Testdatei herangezogen, weil FileExists() jede Datei aus dem Array angeblich findet...


    Global $aCSV
    global $trennzeichen = ","
    Dim $array_komplett[1][1]

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

    _filereadtoarray($einzulesende_csv, $aCSV)

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

    for $i = 3 to ubound($aCSV) - 1
    Dim $aNeuesArray[1]
    Local $spalte = $aCSV[$i]
    while 1
    $erstestrennzeichen = StringInStr($spalte, $trennzeichen) ;Sucht nach der Stelle des nächsten Trennzeichens
    if $erstestrennzeichen Then ;Wenn eins gefunden wurde, dann...
    $aNeuesArray[ubound($aNeuesArray) - 1] = StringLeft($spalte, $erstestrennzeichen - 1) ;wird ein neuer String in das temporäre Array geschrieben. Der String beinhaltet den Inhalt des Strings von dem "großen Array" von der ersten Position bis zu der Position wo das erste Trennzeichen gefunden, minus damit das Trennzeichen selber in das neue Array nicht mit geschrieben wird.
    redim $aNeuesArray[ubound($aNeuesArray) + 1] ;Für den nächsten Inhalt wird eine weitere Zeile dem Array hinzugefügt
    $spalte = StringTrimLeft($spalte, $erstestrennzeichen) ;Für den nöchsten Durchlauf wird der String bis zum ersten Trennzeichen gekürzt
    Else
    _arraydelete($aNeuesArray, ubound($aNeuesArray)) ;Löscht die letzte Zeile des Arrays, die in jedem Durchgang zu viel geschrieben wird
    if ubound($aNeuesArray) > ubound($array_komplett, 2) Then ;Die Anzahl der Spalten in $array_komplett ist abhängig von der Anzahl der Zeilen in $aNeuesArray.
    redim $array_komplett[ubound($array_komplett) + 1][ubound($aNeuesArray)] ;Wenn in $aNeuesArray mehr Zeilen als Spalten in $array_komplett vorhanden sind, so wird die Anzahl der Spalten angepasst.
    Else
    redim $array_komplett[ubound($array_komplett) + 1][ubound($array_komplett, 2)] ;Ansonsten bleibt die Spaltenanzahl gleich, und es wird nur eine neue Zeile angehängt.
    EndIf

    for $a = 0 to ubound($aNeuesArray) - 1 ;Hier werden die Inhalte aus den Zeilen von $aNeuesArray in die Spalten von $array_komplett aufgeteilt
    $array_komplett[ubound($array_komplett) - 1][$a] = $aNeuesArray[$a]
    Next
    ExitLoop
    EndIf
    WEnd
    Next

    ;Col 1 = User
    ;Col 4 = Drucker
    for $b = 1 to ubound($array_komplett) - 1

    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$i]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$b][1]


    ;~ for $e = 0 to ubound($druckeruebersicht, 2) - 1
    ;~ MsgBox(1, "lala", "Schleife 2")
    ;~ if stringinstr($druckeruebersicht[ubound($druckeruebersicht) - 1][$e], $array_komplett[$b][4]) Then
    ;~ $var = 1
    ;~ EndIf
    ;~ Next
    ;~ if $var < 1 Then
    ;~
    ;~ ReDim $druckeruebersicht[ubound($druckeruebersicht)][ubound($druckeruebersicht, 2) + 1]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][ubound($druckeruebersicht, 2) - 1] = $array_komplett[$b][4]
    ;~ EndIf
    ;~
    ;~


    ;~ if $array_komplett[$b][4] <> $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] Then
    ;~ MsgBox(1, "lala", $array_komplett[$b][4])
    ;~ MsgBox(1, "lala", $druckeruebersicht[ubound($druckeruebersicht) - 1][$e])

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

    ;~ EndIf
    ;~ _arraydisplay($druckeruebersicht)

    Next

    EndIf
    Next

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

    func yfnrpc() ; erstellt ein array "yfnrpc[]" mit allen yf-nr der rechner
    ; es wird auf dem tja nach missing_patches_neu* logdateien gesucht. logdatei = pc = yfnr
    Global $yfnrpc[1]
    Local $search = FileFindFirstFile("\\yf7sltja\log$\missing_patches_neu*") ; suche nach DER ERSTEN missing_patches_neu* datei
    Local $count = 0
    If $search = -1 Then ; errorhandling
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    local $file = FileFindNextFile($search) ; suche die NÄCHSTE missing_patches_neu* datei
    If @error Then ExitLoop
    local $yfnr = StringRight ( $file, 8 ) ; lese vom dateinamen nur die letzten 8 zeichen
    _ArrayAdd($yfnrpc, $yfnr)
    $count = $count + 1
    WEnd
    FileClose($search)
    _ArraySwap($yfnrpc[0], $count)
    EndFunc

    [/autoit]

    Es ist so, dass ich einige csv's habe, in denen Infos über das Druckverhalten von Benutzern ist, also Dateiname, Name des PC's, Name des Druckobjektes etc.

    Habe nun diese Datei in einem Array formatiert, damit ich das Ganze weiterverarbeiten kann. Mein Ziel ist es nun, dass ich herausfinde und gebündelt darstellen kann, welcher User auf welchen Drucker bzw. welches Druckobjekt druckt.

    Nun wollte ich aus dem Array $array_komplett die Druckobjekte, Name des Users und Arbeitsstation extrahieren und in ein neues Array schreiben. Dabei wollte ich dass in dem neuen Array in der ersten Spalte die Arbeitsstaion, in der zweiten der Username und in den darauffolgenden Spalten die Drucker aufgelistet werden. Und dafür brauche ich das weshalb ich überhaupt schreibe.

    Da die verschiedenen Dokumente auf die gleichen Druckobjekte gedruckt werden, tauchen diese natürlich häufiger auf, ich will sie aber bloß jeweils nur einmal in meinem neuen Array gelistet haben.

  • Ganze Zeile in Array durchsuchen

    • Scritch
    • 29. April 2013 um 17:13
    Zitat von Christoph54

    Ich will Autofahren aber das mit diesem Lenkrad und den Pedalen ist mir halt zu kompliziert, geht das nicht einfacher?
    So ungefähr hört sich das an... ;)
    Vielleicht solltest du dich erst einmal mit ein zwei Grundlagen Tutorials auseinandersetzen bevor du richtig loslegst. :)


    Ich bin mit den Grundlagen durchaus vertraut ;) Schleifen an sich sind nichts schlimmes, habe einfach gehofft dass ich das mit einer Funktion lösen kann ;)

  • Ganze Zeile in Array durchsuchen

    • Scritch
    • 29. April 2013 um 17:01
    Zitat von Make-Grafik

    Wenn ich dich richtig verstanden habe, willst du in einer Zeile nach einen bestimmten Wert suchen?


    Korrekt. Allerdings verstehe ich nicht ganz was du mit deinem Code sagen/zeigen möchtest :)

    Eine Variante mit Schleifen etc. habe ich ja auch bereits gefunden. Aber das ist mir halt zu kompliziert, geht das nicht einfacher?

  • Ganze Zeile in Array durchsuchen

    • Scritch
    • 29. April 2013 um 16:39

    Hallo. Kann ich in einer einzelnen Zeile in einem Array mit mehreren Spalten unkompliziert was suchen? Man kann mit _arraysearch() zwar auch Spalten durchsuchen, man muss damit aber immer umständlicherweise die Spalte angeben die durchsucht werden soll.

    Geht das einfacher?

  • Array wird in Schleife nicht abgearbeitet

    • Scritch
    • 29. April 2013 um 14:02

    Hallo. Ich habe ein Array in meinem Skript, in dem viele PC-Namen stehen. Ein fester Pfad mit einer Datei drin, deren name des PC-Namen entspricht, soll verarbeitet werden. N

    Nun möchte ich in einer einfachen for-Schleife den Dateinamen in dem Pfad immer ändern, sodass je Schleifendurchgang immer die nächste Datei abgearbeitet wird. Aber das geschieht nicht. Eigentlich ist das ganz einfach, aber das Skript arbeitet immer bloß einen Namen ab.

    Siehe auch nochmal mein Kommentar ziemlich weit oben im Skript

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #Include <File.au3>
    #Include <Date.au3>

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

    dim $druckeruebersicht[2][2]
    Local $var
    yfnrpc()
    ;~ dim $yfnrpc[1] = ["yf7sltpy"]

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

    _arraydisplay($yfnrpc)

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

    for $i = 0 to UBound($yfnrpc) - 1
    $einzulesende_csv = @ScriptDir & "\" & $yfnrpc[$i] & ".csv"
    if FileExists($einzulesende_csv) = 1 Then ;Hier ist das Problem begraben. Ich habe bisher nur eine Testdatei in dem Verzeichnis. Bei jedem Durchgang wird wieder diese Testdatei herangezogen, weil FileExists() jede Datei aus dem Array angeblich findet...


    Global $aCSV
    global $trennzeichen = ","
    Dim $array_komplett[1][1]

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

    _filereadtoarray($einzulesende_csv, $aCSV)

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

    for $i = 3 to ubound($aCSV) - 1
    Dim $aNeuesArray[1]
    Local $spalte = $aCSV[$i]
    while 1
    $erstestrennzeichen = StringInStr($spalte, $trennzeichen) ;Sucht nach der Stelle des nächsten Trennzeichens
    if $erstestrennzeichen Then ;Wenn eins gefunden wurde, dann...
    $aNeuesArray[ubound($aNeuesArray) - 1] = StringLeft($spalte, $erstestrennzeichen - 1) ;wird ein neuer String in das temporäre Array geschrieben. Der String beinhaltet den Inhalt des Strings von dem "großen Array" von der ersten Position bis zu der Position wo das erste Trennzeichen gefunden, minus damit das Trennzeichen selber in das neue Array nicht mit geschrieben wird.
    redim $aNeuesArray[ubound($aNeuesArray) + 1] ;Für den nächsten Inhalt wird eine weitere Zeile dem Array hinzugefügt
    $spalte = StringTrimLeft($spalte, $erstestrennzeichen) ;Für den nöchsten Durchlauf wird der String bis zum ersten Trennzeichen gekürzt
    Else
    _arraydelete($aNeuesArray, ubound($aNeuesArray)) ;Löscht die letzte Zeile des Arrays, die in jedem Durchgang zu viel geschrieben wird
    if ubound($aNeuesArray) > ubound($array_komplett, 2) Then ;Die Anzahl der Spalten in $array_komplett ist abhängig von der Anzahl der Zeilen in $aNeuesArray.
    redim $array_komplett[ubound($array_komplett) + 1][ubound($aNeuesArray)] ;Wenn in $aNeuesArray mehr Zeilen als Spalten in $array_komplett vorhanden sind, so wird die Anzahl der Spalten angepasst.
    Else
    redim $array_komplett[ubound($array_komplett) + 1][ubound($array_komplett, 2)] ;Ansonsten bleibt die Spaltenanzahl gleich, und es wird nur eine neue Zeile angehängt.
    EndIf

    for $a = 0 to ubound($aNeuesArray) - 1 ;Hier werden die Inhalte aus den Zeilen von $aNeuesArray in die Spalten von $array_komplett aufgeteilt
    $array_komplett[ubound($array_komplett) - 1][$a] = $aNeuesArray[$a]
    Next
    ExitLoop
    EndIf
    WEnd
    Next

    ;Col 1 = User
    ;Col 4 = Drucker
    for $b = 1 to ubound($array_komplett) - 1

    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][0] = $yfnrpc[$i]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][1] = $array_komplett[$b][1]


    ;~ for $e = 0 to ubound($druckeruebersicht, 2) - 1
    ;~ MsgBox(1, "lala", "Schleife 2")
    ;~ if stringinstr($druckeruebersicht[ubound($druckeruebersicht) - 1][$e], $array_komplett[$b][4]) Then
    ;~ $var = 1
    ;~ EndIf
    ;~ Next
    ;~ if $var < 1 Then
    ;~
    ;~ ReDim $druckeruebersicht[ubound($druckeruebersicht)][ubound($druckeruebersicht, 2) + 1]
    ;~ $druckeruebersicht[ubound($druckeruebersicht) - 1][ubound($druckeruebersicht, 2) - 1] = $array_komplett[$b][4]
    ;~ EndIf
    ;~
    ;~


    ;~ if $array_komplett[$b][4] <> $druckeruebersicht[ubound($druckeruebersicht) - 1][$e] Then
    ;~ MsgBox(1, "lala", $array_komplett[$b][4])
    ;~ MsgBox(1, "lala", $druckeruebersicht[ubound($druckeruebersicht) - 1][$e])

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

    ;~ EndIf
    ;~ _arraydisplay($druckeruebersicht)

    Next

    EndIf
    Next

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

    func yfnrpc() ; erstellt ein array "yfnrpc[]" mit allen yf-nr der rechner
    ; es wird auf dem tja nach missing_patches_neu* logdateien gesucht. logdatei = pc = yfnr
    Global $yfnrpc[1]
    Local $search = FileFindFirstFile("\\yf7sltja\log$\missing_patches_neu*") ; suche nach DER ERSTEN missing_patches_neu* datei
    Local $count = 0
    If $search = -1 Then ; errorhandling
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf
    While 1
    local $file = FileFindNextFile($search) ; suche die NÄCHSTE missing_patches_neu* datei
    If @error Then ExitLoop
    local $yfnr = StringRight ( $file, 8 ) ; lese vom dateinamen nur die letzten 8 zeichen
    _ArrayAdd($yfnrpc, $yfnr)
    $count = $count + 1
    WEnd
    FileClose($search)
    _ArraySwap($yfnrpc[0], $count)
    EndFunc

    [/autoit]
  • Pfad des Papierkorbes unter Win 7

    • Scritch
    • 18. April 2013 um 11:31

    Hallo. Ich habe vor einiger Zeit aus einem defekten Laptop die Festplatte ausgebaut. Nun fragte mich der ehemalige Benutzer des Laptops nach einer gelöschten Datei von der Festplatte.

    Ich habe dann die HDD gleich als externen Datenträger angeschlossen und bin dann ins alte Systemverzeichnis und zum Recycler navigiert. Darin befand sich dann ein "Link" namens "S-1-5-21-1-1-7955-708036". Wenn ich dem folge lande ich in dem Papierkorb von diesem Rechner, aber nicht in dem von der Festplatte.

    Meine Frage ist nun, wie ich auf den Recycler von dem Datenbestand auf der externen HDD zugreifen kann.

  • Fotos von einem Objekt zu einem 3D-Objekt "formen"

    • Scritch
    • 7. Januar 2013 um 15:11

    Danke für deine Antort, AspirinJunkie. Ja, nachdem ich es geschrieben habe ist es mir auch eingefallen dass das 3D-Bild auf den Homepages aus vielen Einzelbildern aus verschiedenen Perspektiven besteht :)

    Ich werde mir mal die Photogrammetrie zu Gemüte führen, klingt sehr interessant :) Danke dafür.

  • Elektronische Tanzmusik

    • Scritch
    • 7. Januar 2013 um 12:08
    Zitat von YaeroxXO

    Festivals die ich sehr sehr sehr gern besuchen möchte: Tomorrowland, Qlimax, Qlimax (Australia), Defqon1 und ich will gerne mal nach Belgien -> Dirty Workz :D

    Defqon 1 in Australien soll auch echt großartig sein, ist mir aber etwas weit weg und vor allem zu teuer :)

  • Fotos von einem Objekt zu einem 3D-Objekt "formen"

    • Scritch
    • 7. Januar 2013 um 11:58

    Hallo. Man kennt ja z. B. von Onlineshops diese 3D-Ansichten von z. B. Laptops, die man sich von allen Seiten anschauen kann. Wie könnte man sowas realisieren? Ich möchte z. B von einem Auto oder einem Haus aus vielen Fotos von allen Seite eine solche 3D-Darstellung hinbekommen. Theoretisch sollte das doch möglich sein?

    Ein Problem stellt sich natürlich schon von vornerein in den Weg, nämlich dass man Fotos von besagten Objekten nicht im Studio machen kann, wegen des weißen Hintergrundes. Das wäre aber wohl eher die Sache eines Bildbearbeitungsprogramms.

    Wie aber füge ich die Bilder mittels eines Skriptes am besten zu einem 3D-Objekt zusammen? Wieviele Bilder bräuchte man da?

  • Elektronische Tanzmusik

    • Scritch
    • 7. Januar 2013 um 11:43

    Bin auch ein absoluter Fan vom Hardstyle. War auch schon zu "Festivals" im Land des Hardstyles, Holland. Genannt seien da Qlimax, Defqon 1 und Hardbass. Gibs da unter euch auch Besuche von den genannten Veranstaltungen? Hardstyle ist aber bei weitem nicht gleich hardstyle. Es gibt Hardstyle der mir gar nicht gefällt und wiederum Tracks die kann in einer Dauerschleife stundenlang hören :)

    Dubstep habe ich vor einigen Monaten erst für mich entdeckt, wobei ich da noch nicht über den Tellerrand von Skrillex geschaut habe - was gibt es da noch an tollen Interpreten?

    Neben dem elektronischen Kram höre ich aber auch gerne Alternative, Punk Rock und Hard Rock.

    Ist der Jumpstyle nicht ausgestorben? :P

  • Skript für Ändernung der Bildschirmauflösung

    • Scritch
    • 10. Dezember 2012 um 11:04

    Hallo. Danke für deine Antwort. Sorry, vergessen zu erwähnen. Wir setzen immernoch Windows XP ein. Ist der Autor des Skriptes einer aus unserem Forum? Ich weiss gar nicht, wo ich das Skript her hatte. Benutze es schon seid über einem jahr. man findet es auch an mehreren Stellen im Netz. :(

  • Skript für Ändernung der Bildschirmauflösung

    • Scritch
    • 4. Dezember 2012 um 12:30

    Hallo. Ich habe mir vor einiger Zeit ein Skript gebastelt womit ich die Auflösung ändern kann. Hintergrund dabei war es, die Auflösung bei anderen Mitarbeitern zu ändern, ohne sich umloggen zu müssen. Mit einem RunAs-Skript habe ich das eigentliche Skript einfach gestartet und dann unter meiner Adminkennung ausgeführt.

    Jetzt werden viele Monitore ersetzt durch welche mit Full HD-Auflösung. Habe mein Skript dahingehend erweitert. Bei meinem PC und meinem monitor - 22", etwas älter - funktioniert es einwandfrei. Bei den neuen 27" monitoren jedoch nicht. Zwar kann ich zwischen 1024*768 und 1280*1024 hin und her switchen, aber bei Full HD passiert nichts. Ich vermute dass das an der Frequenz liegt.

    Da ich die Funktion selbst nicht geschrieben habe und daher auch nicht ganz durchsteige wollte ich hier um Hilfe bitten.

    Hier das Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <string.au3>
    #include <Array.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <GUIListBox.au3>
    #include-once

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

    Global $tmp = "d:\tmp.txt"
    Global $atmp
    Global $pw = "d:\pw.txt"
    Global $apw
    Global $pfad = "d:\Installationen.exe"
    ;~ Dim $abenutzername[4] = ["Benutzer1", "Benutzer2", "Benutzer3"]
    Global $domain = "Domäne"

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

    _FileReadToArray($tmp, $atmp)
    _FileReadToArray($pw, $apw)
    _ArrayDelete($atmp, 0)
    _ArrayDelete($apw, 0)

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

    ;~ FileDelete($tmp)
    ;~ FileDelete($pw)
    ;~ If not FileExists($tmp) Then
    ;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
    ;~ Exit
    ;~ EndIf

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

    ;~ For $i = 1 To Ubound($atmp) - 1 ;für den Fall, das mehr als ein Benutzer in der Datei steht
    ;~ _ArraySearch($abenutzername, $atmp[$i])
    ;~ If @error Then
    ;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
    ;~ Exit
    ;~ EndIf
    ;~ Next

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

    Run(@ComSpec & " /c " & "net stop spooler", "", @SW_HIDE)
    Sleep(2000)
    Run(@ComSpec & " /c " & "net start spooler", "", @SW_HIDE)

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

    Opt("GUIOnEventMode", 1)

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

    $Form1 = GUICreate("Installationen", 220, 80, 150, 150)
    ;von links, von oben, breite, höhe

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

    $Group3 = GUICtrlCreateGroup("Auflösung", 10, 10, 200, 55)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Combo4 = GUICtrlCreateCombo("Auflösung auswählen", 30, 30, 160, 35) ;Bildschirmauflösung
    GUICtrlSetData($Combo4, "1024*768|1280*1024|1920*1080", "Auflösung auswählen")
    GUICtrlSetOnEvent($Combo4, "Combo4")
    GUISetState()

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

    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    ;Case $msg = $ButtonDrucker
    ; MsgBox(0,"Test",GUICtrlRead($cList))
    EndSelect
    WEnd

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

    Func Combo4()
    $read = GUICtrlRead($Combo4)
    If $read = "1024*768" Then
    aufloesung(1024,768)
    EndIf

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

    If $read = "1280*1024" Then
    aufloesung(1280,1024)
    EndIf

    If $read = "1920*1080" Then
    aufloesung(1920,1080)
    EndIf
    EndFunc

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

    Func aufloesung($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
    Local Const $DM_PELSWIDTH = 0x00080000
    Local Const $DM_PELSHEIGHT = 0x00100000
    Local Const $DM_BITSPERPEL = 0x00040000
    Local Const $DM_DISPLAYFREQUENCY = 0x00400000
    Local Const $CDS_TEST = 0x00000002
    Local Const $CDS_UPDATEREGISTRY = 0x00000001
    Local Const $DISP_CHANGE_RESTART = 1
    Local Const $DISP_CHANGE_SUCCESSFUL = 0
    Local Const $HWND_BROADCAST = 0xffff
    Local Const $WM_DISPLAYCHANGE = 0x007E
    If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
    If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
    If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
    If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
    Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
    Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
    If @error Then
    $B = 0
    SetError(1)
    Return $B
    Else
    $B = $B[0]
    EndIf
    If $B <> 0 Then
    DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
    DllStructSetData($DEVMODE, 4, $i_Width, 2)
    DllStructSetData($DEVMODE, 4, $i_Height, 3)
    DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
    DllStructSetData($DEVMODE, 4, $i_RefreshRate, 5)
    $B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
    If @error Then
    $B = -1
    Else
    $B = $B[0]
    EndIf
    Select
    Case $B = $DISP_CHANGE_RESTART
    $DEVMODE = ""
    Return 2
    Case $B = $DISP_CHANGE_SUCCESSFUL
    DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
    "int", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
    $DEVMODE = ""
    Return 1
    Case Else
    $DEVMODE = ""
    SetError(1)
    Return $B
    EndSelect
    EndIf
    EndFunc ;==>_ChangeScreenRes

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

    Func _exit()
    FileDelete("d:\Installationen.exe")
    Exit
    EndFunc

    [/autoit]
  • Aktion auf markierte Dateien anwenden

    • Scritch
    • 25. Oktober 2012 um 09:47
    Zitat von peethebee

    Zumindest für Textinhalte könnte man den alten Inhalt der Zwischenablage noch sichern und wiederherstellen, mancher User wundert sich sonst…


    Nette Idee, aber den Komfort für den user lasse ich mal aus :) Ich unterstelle denen sowieso jetzt einfach mal, dass die wenigsten überhaupt mit der Zwischenablage arbeiten :)

    Zitat von Andy

    Dateien markieren, rechtsklick, und dein Programm anklicken (das dann natürlich ins Explorer-Kontextmenü muss^^, was aber kein Problem darstellt ).
    Geht ohne Hotkey (den du tunlichst vor jeder "Datei Markieren"-Aktion ausschalten solltest! ) und macht den geringsten Aufwand.
    Weiterhin kannst du im Kontextmenu dein Programm ans "Senden an" anfügen. Das ist der SENDTO-Ordner im Verzeichnis C:\Dokumente und Einstellungen\Administrator(oder der Username)\SendTo
    Die übergebenen Dateien lassen sich in AutoIt in $cmdline[] auslesen


    Ehrlich gesagt weiß ich nicht genau was genau du mir mitteilen möchtest :) Wieso Programm im Kontextmenü? Wieso "Senden an..."? Und wieso den Hotkey nach jeder Markieraktion ausschalten? Der Benutzer soll Dateien markieren und einmal den Hotkey drücken... und nicht gedrückt halten.

  • Aktion auf markierte Dateien anwenden

    • Scritch
    • 24. Oktober 2012 um 12:00

    Klasse Idee, danke. Ich hätte jetzt gedacht dass die in die Zwischenablage zu kopierenden Dateien eine nach der anderen in der Zwischenablage auf taucht. Aber dem scheint ja nicht so zu sein :) So ists perfekt, danke.

  • Aktion auf markierte Dateien anwenden

    • Scritch
    • 24. Oktober 2012 um 11:10

    So funktioniert es wenigstens schonmal ansatzweise:

    [autoit]

    HotKeySet("{F5}", "test")

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

    while 1
    sleep(100)
    WEnd

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

    Func test()
    send("^c")
    sleep(300)
    Local $bak = ClipGet()
    MsgBox(0, "Clipboard contains:", $bak)
    ;~ Exit
    EndFunc

    [/autoit]

    Wenn allerdings mehrere Dateien markiert werden, dauert es entsprechend länger diese der Zwischenablage hinzuzufügen. Länger als 300ms. Ggf. kann man den Wert noch dynamisch anpassen, wenn sich keine andere bessere Lösung findet.

  • Aktion auf markierte Dateien anwenden

    • Scritch
    • 23. Oktober 2012 um 15:10

    Hallo. Danke für deine Antwort. An die Möglichkeit habe ich auch schon gedacht. Wäre aber nur eine Notlösung. Ich suche nicht nach dem einfachsten Ergebnis das zu programmieren, sondern nach der einfachsten Bedienung :)

    Später möchte das nicht ich benutzen, sondern es werden irgendwelchen unbedarften User benutzen sollen, die durch eine einfache Methodik, also quasi mit einem Hotkey, Dateien makieren sollen, die z. B. von einem Löschlauf verschon bleiben. Und da ist die Drag n' Drop Methode nicht die optimalste wenn die User noch wieder mit einer GUI konfrontiert werden :)

  • Aktion auf markierte Dateien anwenden

    • Scritch
    • 23. Oktober 2012 um 10:32

    Hallo. Wenn ich angenommen zehn Dateien in einem Verzeichnis habe und davon fünf markiere, möchte ich auf die fünf markierten Dateien eine Aktion anwenden. Meinetwegen umbennen, Atribut verändern oder verschieben etc. Wie bekomme ich diese Mehrfachauswahl nun in ein Array, geht das überhaupt?

  • Stringprobleme mit _ArraySearch()

    • Scritch
    • 18. September 2012 um 13:46

    Ach verdammt. Aber danke.

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™