Beiträge von fee

    Möglicherweise habe ich das zur Sortierung in Beitrag #16 passende JavaScript gefunden. Nach Berichtigung der Kodierung mit Notepad++ und JSFormat des Plugins JSTool müsste die Funktion ab Zeile 902 bis Zeile 909 im Dateianhang und natürlich einigen Unterfunktionen darunter und darüber für die Farbsortierung zuständig sein. :/

    Jetzt braucht es nur noch jemand mit Muse, Zeit und guten JavaScript-Kenntnissen, um das wirklich sauber übersetzen und meine Vermutung überprüfen zu können. Ich habe leider weder Zeit dafür noch gute JavaScript-Kenntnisse. X/

    Soll die erste Tabelle etwa die transponierte Version der zweiten sein?

    Also, entweder verstehe ich sie dann nicht oder sie ist inhaltlich falsch.

    Erklärung? Oder besser einen ScreenShot aus Excel, falls die hier schlecht umsetzbare Formatierung nicht nur die drei rechten redundanten Zellen der Kopfzeile betrifft.


    Bei der zweiten Tabelle aufpassen, dass die beiden hinzugefügten Zeilen ohne rowspan sind und in den HTML-Code-Tagattributen der X-Bit-Zellen jetzt rowspan="3" steht (siehe fehlende Zeilentrennlinien), auch in der Hilfedatei.


    Edit: Sollten wir das nicht besser per PN weitermachen? Sonst entfremden wir dieses Thema hier vollends!

    Tweaky : Oder so (jeweils die ... als … [Auslassungspunkte; Alt+0133], die Liste als <ul><li>…</li></ul>, die Tabelle als <table><thead><tr><th>…</th></tr></thead><tbody><tr><td>…</td></tr></tbody></table> und die Negation im Satz nach der Tabelle hat bei mir den Aha-Effekt ausgelöst):

    Außerdem wäre es vielleicht noch interessant, nach dem ersten oder zweiten Satz in den Bemerkungen der Reg*()-Funktionen mit einzubringen, dass HK oder HKEY schlicht Handle (to a) KEY (siehe Absatz-Ende) bedeutet. Wusste ich bis vorgestern nicht.


    Gruß, fee

    Guten Abend.


    Tweaky: Dein Textvorschlag ist ja mittlerweile in der deutschen Hilfe gelandet, war aber für mich trotzdem nicht ausreichend verständlich, unter welchen Architektur-Umständen/-Kombinationen ein Registry-Eintrag gelesen werden kann oder nicht. Deshalb bastelte ich mir schnell ein Test-Skriptchen und kam zu einer lauffähigen Lösung.

    Hätte der letzte Absatz aus Beitrag #7 von AspirinJunkie vom Sinn her und vor allem der letzte Satz dort nach dem Doppelpunkt auch in der Hilfe gestanden, wäre das Thema für mich gleich klar verständlich gewesen, auch ohne Verweis auf die Microsoft-Website, die einen noch mehr verwirrt, auch weil dort beispielsweise Keys mit Tasten übersetzt wird.

    Wäre also schön und nett, wenn ihr diesen Absatz sinngemäß in die Hilfe für die Reg*()-Funktionen mit aufnehmen könntet.


    Gruß, fee


    Edit: Mein Zusatztext-Vorschlag aus dem Beitrag von AspirinJunkie zusammengeschustert:

    Das Skript wird als x86-Programm ausgeführt? Dann ist:

    • HKLM\SOFTWARE der 64 Bit-Zweig und
    • HKLM\SOFTWARE\WOW6432Node der 32 Bit-Zweig

    HKLM64 ist demnach anzugeben, wenn von einem x86-Skript aus NICHT in WOW6432Node geschrieben werden soll.

    UEZ , gerne und auch Danke fürs Lob. :)

    Den Code im SourceCode habe ich auch nicht finden können. Ich vermute, der ist in PHP geschrieben, weil die Seite jedes Mal neu geladen wird. Da kommt man dann nicht ran, außer man fragt den Admin.


    eukalyptus : Sehr schön, das SortByHUEGroup_LABLightness_V2, so sind wenigstens die Farben gut gruppiert.

    Hallo,

    vielleicht kann jemand die Formeln von CIEDE2000 verstehen und umsetzen. Möglicherweise können die Farben damit besser sortiert werden. Jedenfalls sehen diese Sortierungen für mich recht ordentlich aus.

    Übrigens, um sich den Weg zum Ziel zu erleichtern und für jeden Versuch/Jedermann immer die gleichen Ausgangsfarben zu haben, könnte man z. B. SRandom(80) oberhalb der Random()-Schleife (Zeile 13) setzen.

    Ich für meinen Teil bin nicht weit gekommen:

    Gruß, fee

    Erst mal vielen Dank euch allen für eure schnellen Antworten.


    Peter S. Taler

    Klar, dass deine Beispiele funktionieren, denn sooo unerfahren bin ich in AutoIt im Gegensatz zu meinem Benutzertitel hier ja nun auch wieder nicht, sonst hätte ich die Fehlerquelle nicht gefunden, nicht wahr? ;)


    AspirinJunkie

    In diesem Forum ist noch die 3.3.16.0 verlinkt, weshalb ich meinen Gedanken an ein Update wieder verwarf.

    Der Fehler ist zwar behoben, aber meiner Meinung nach mit der Holzhammer-Methode, indem jeder Wert "einfach" in einen String umgewandelt wird. Außerdem wird das Schlüsselwort Null im ListView einfach als leeres Feld dargestellt statt in seiner Textform, wie es bei den Schlüsselworten Default, False und True der Fall ist.


    Jedenfalls kann ich jetzt wieder endlos weiterarbeiten statt endlos aufs Skriptende zu warten … ^^


    Gruß, fee


    Edit: Obendrein würde bei der Ausgabe von Null in Textform die Umwandlung in einen String für die DllCalls hinfällig werden, denke ich und sich auch noch von Feldern mit "leeren Strings" unterscheiden, was vor allem bei einer Sortierung nicht schlecht wäre.

    Guten Tag, liebe Leute.


    Ich habe hier ein Windows 7 Professional 64 Bit und AutoIt 3.3.16.0 mit SciTE installiert.

    Gestern machte ich die Entdeckung, dass _ArrayDisplay() nicht mit Null-Keywords im übergebenen Array umgehen kann und in eine Endlos-Schleife gerät.


    Hier ein Beispiel:

    AutoIt
    #Include <Array.au3>
    
    Dim $Array = [Null, False, True]
    _ArrayDisplay($Array)

    Auch zweidimensionale Arrays sind davon betroffen und die Platzierung des Null-Keywords ist egal.


    Meine Suche ergab, dass der Fehler in der Datei <ArrayDisplayInternals.au3> liegt, welche von <Array.au3> eingebunden wird. Dort wird von der Funktion __ArrayDisplay_Share() über weitere Funktionen die Funktion __ArrayDisplay_SortArrayStruct() aufgerufen. Darin kommt eine Do…Until-Schleife vor, welche bei Null-Keywords mit natürlicher Sortierung endlos läuft, weil in diesem Fall die DllCall()s den in der MSDN undokumentierten Wert -2 zurückgeben, der nicht abgefangen wird. Bei numerischer Sortierung liefern die Number()-Funktionen einfach 0, was zu keiner Endlos-Schleife führen sollte.

    Dabei dient der erstmalige Aufruf von __ArrayDisplay_SortArrayStruct() über vorgeschaltete Funktionen eigentlich nur der Ermittlung der Sortierdauer einer Spalte.


    Man könnte nach der If-Abfrage, also nach Zeile 801 eine Begrenzung mit If $r < -1 Or $r > 1 Then $r = 0 einfügen oder im nachfolgenden Switch-Teil aus Case 0 ein Case 0, -2 oder Case Else machen. Beide Varianten führen zu einem erfolgreichen Abbruch der Schleife bei Null-Keywords.


    Schön wäre es allerdings noch, wenn auch wie bei den Bool-Keywords False und True das Wort Null im ListView der _ArrayDisplay()-GUI erscheinen würde, wenn dieses Schlüsselwort auftritt. Wo das bewerkstelligt werden kann, habe jedoch nicht herausgefunden.


    Gruß, fee

    Micha_he :

    Vielen Dank für deine Anleitung. Endlich bin ich mal dazu gekommen, zumindest die genannten Werte in der Registry zu überprüfen.

    Zu 1: Bei mir steht unter Progid der Wert Applications\AutoIt3.exe statt AutoIt3Script – falsch.

    Zu 2: Unter (Standard) steht AutoIt3Script – richtig. Als PerceivedType ist dort noch text definiert.

    Zu 3: Dort ist unter (Standard) der Wert AutoIt3Script angegeben und ebenfalls ein PerceivedType mit text.

    Zu 4.1: Die "Progid" AutoIt3.exe ist bei nur unter HKEY_CURRENT_USER\Software\Classes\Applications vorhanden, worunter es auch ein …\AutoIt3.exe\shell\open\command gibt, jedoch nirgendwo ein DefaultIcon – falsch. Für die (Standard)-Einträge in shell und open ist nur (Wert nicht festgelegt) zu finden.

    Zu 4.2: Dort ist der Schlüssel AutoIt3Script notiert mit allen Unterschlüsseln und Werten, wie es sich gehört.


    Weil aber in der Zwischenzeit auch andere Programme nach der Installation ihr Dateityp-Symbol nicht setzen oder sich nicht im Explorer-Kontextmenü eintragen konnten, gebe ich diesen Schwachsinn mit der Benutzerkontensteuerung auf, mache mein eingeschränktes Benutzerkonto zum Administrator und lösche das derzeitige Administratorkonto. "Sicherheitsgewinn" ade, aber dafür Funktionalität und weniger Ärger bzw. Zeit vertan, obwohl mir das Aufgeben nicht schmeckt.

    Trotzdem danke ich euch allen für eure Mühe und Hilfe.


    Gruß, fee

    Alina : Grob gesagt schaut sein Skript, ob eine RNS-Datei im angegebenen Ordner erstellt oder geändert wurde und stellt über ein Dummy-Steuerelement die Dateigröße für Debugzwecke zur Ausgabe in die SciTE-Konsole bereit. Vorbereitet sind auch schon jene Aktionen, wenn du noch etwas beim Umbenennen oder einer Dateitypzuweisung erledigten lassen möchtest. Ansonsten hat er nur noch die Umwandlungsfunktion und beim Beenden des Skriptes das Deregistrieren der Überwachungsfunktion eingebaut.

    Eigentlich nichts Wildes und relativ einfach, wenn man es irgendwann mal verstanden hat. Bei welchem Teil blickst du noch nicht durch?

    Bitnugger :

    den alten Namen bekommst du mit "Item1", den neuen mit "Item2".

    Okay, das wusste ich nicht.

    Wir benötigen ja nicht nur den Namen des Pfades, sondern vor allem auch den Inhalt der Datei... den es aber evtl. noch nicht gibt, nachdem die Datei erstellt wurde ($SHCNE_CREATE) - z.B. mit FileOpen("filename.rns", $FO_OVERWRITE) - hier greift dann $SHCNE_UPDATEITEM, nachdem die Daten geschrieben wurden!

    Ups, das hatte ich nicht bedacht.

    jedoch kein $SHCNE_ASSOCCHANGED.

    Das habe ich mit reingenommen, weil in der Beschreibung steht:

    This event should also be sent for registered protocols.

    Muss ich dann wohl missverstanden haben. Ein Dateityp ist ja kein Protokoll, oder?

    Schau mal hier, wie KaFu das gelöst hat.

    Uff, den *_Lock und *_Unlock-Teil hätte ich vielleicht noch hinbekommen können, aber allerspätestens bei _WinAPI_ShellChangeNotifyRegisterEx wäre für mich Schluss gewesen.

    Ansonsten... sehr schön umgesetzt. :rock:

    Danke dir. :) Deine neue Version ebenso!


    Alina :

    Das Anzeigen das eine neue Datei im Ordner ist erfolgt bei mir nicht. Die GUI baut auf, aber sie füllt sich nicht, sobald eine weitere Datei in den Ordner kommt.

    Klar, weil Bitnugger kein Edit-Element wie ich in die GUI eingebaut hat und Meldungen zum Debuggen in der SciTE-Konsole ausgeben lässt, sofern das Skript von SciTE aus gestartet wurde.

    Alina : Gern geschehen! :)


    Bitnugger : Die Ordnerüberwachung wäre vermutlich toll, aber

    1. fehlt ein #include <GUIConstantsEx.au3> (nicht schlimm) und
    2. bekomme ich unter Win7 Pro x64 nur ein Event: 0x00040000 nach Hinzufügen einer RNS-Datei im Ordner.

    Leider verstehe ich (noch) nicht, warum.


    Edit:

    Bitnugger : So funktioniert es jetzt bei mir auf Win7 Pro x64, wenn ich eine RNS-Datei im zu überwachenden Ordner erstelle:

    Eine RNS-Datei in einen andernen Dateityp umbenennen würde erkannt werden, umgekehrt jedoch nicht. $SHCNE_ALLEVENTS kann somit vom Erkennungsumfang her auf BitOR($SHCNE_ASSOCCHANGED, $SHCNE_CREATE) reduziert werden. Die rekursive Erkennung habe ich auch entfernt, um Leistung einzusparen. $SHCNE_UPDATEITEM tritt laut Beschreibung nur bei Veränderung des Inhaltes eines Elementes auf, hier also nicht nötig. $SHCNE_CREATE habe ich aus der Funktion _WM_SHELLCHANGENOTIFY() entfernt.

    Die Beschreibung zu SHChangeNotifyRegister empfiehlt statt BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL) den Wert $SHCNRF_NEWDELIVERY in der Funktion _WinAPI_ShellChangeNotifyRegister():

    Messages received use shared memory. Call SHChangeNotification_Lock to access the actual data. Call SHChangeNotification_Unlock to release the memory when done.

    Note: We recommend this flag because it provides a more robust delivery method. All clients should specify this flag.

    Den ersten Zitatsatz weiß ich leider nicht vollständig umzusetzen. Macht aber nix, für mich funktioniert es auch so.

    fee wandelt die 100 in 00 um und auch umgekehrt ! Das ist ja auch richtig. Bei den anderen Lösungen wird auch die 100 in 00 umgewandelt, aber umgekehrt kommt dann nicht wieder 100 raus.

    Am Anfang schriebst du, dass die Eingabezeichenfolge nur zweistellige Zahlen enthält. Finde ich zwar schön, dass mein Vorschlag deine erweiterte Aufgabe richtig löst, was aber nicht von mir beabsichtigt und vor allem nicht ganz deine Aufgabenstellung war. ;)

    Naja, besser so als anders herum. :)

    Bei der Ordnerüberwachung kann ich dir allerdings nicht helfen, das habe ich noch nie gebraucht/gemacht.


    Edit: Den Mod()-Teil in meinem Vorschlag würde ich allerdings durch den Vorschlag von Bitnugger in Beitrag #10 ersetzen, also der For-Schleife ein Step 2 verpassen und danach die letzte Doppelziffer an ungerader Position (sofern vorhanden) verarbeiten. Spart Laufzeit, denn Modulo ist leistungshungrig.

    Hallo Alina ,

    hier mein Vorschlag mit einem Array, erstellt aus dem Code von Musashi , der eine sehr gute Vorlage lieferte:

    Dieser Code könnte jedoch langsamer, aber vielleicht leichter verständlich sein.

    Gruß, fee