Nur ein Registry "valuename" möglich warum? bzw. wie umgehe ich den Fehler?

    • Offizieller Beitrag

    Das Problem ist recht simpel gewesen:
    In der Registry landet der String "0xFF....", zwar als DWORD gespeichert, aber ich habs beim Auslesen als String.
    Zum Umwandeln in Hex bedarf es zwingend eines Integerwertes, also: "0x" & Hex(Int(RegRead(...)),6) um einen RGB auszulesen.
    (In einer INI hat man den Ärger nicht :P)

  • Also, erst einmal etwas grundlegendes für den Threadstarter (und anscheinend nicht nur für ihn) zum Verständnis.

    Ein Zahlenwert ist ein Zahlenwert. Ob ich diesen nun im Dezimal-, Hexadezimal, Oktalsystem oder was sonst auch immer anzeigen lasse ändert nichts an dem Wert der Zahl. Diese Zahlensysteme dienen lediglich der Lesbarkeit für den Menschen, der Computer kennt nur das Binärsystem und nichts anderes.

    In deinem Skript aus Post #1 verwendest Du aber Zeichenketten um diesen Zahlenwert im Hexadezimalsystem darzustellen, also z.B. "0x00FF00FF".
    Dass ist aber eigentlich falsch. Richtig wäre es so wie BugFix es in seinem Minimal-Beispiel hat, nämlich 0x00FF00FF.

    Leider ist AutoIt hier sehr inkonsequent und lässt so ein Kuddel-Muddel zu, d.h. wenn Du anstatt 0x00FF00FF nun die Zeichenkette "0x00FF00FF" für RegWrite benutzt, interpretiert der AutoIt-Interpreter es als Hexadezimalen Zahlenwert und nicht als den Zahlenwert der Zeichenkette (48+120+48+48+70+70+48+48+70+70=640). Höchstwahrscheinlich weil Du REG_DWORD angegeben hast. Bei REG_SZ würde AutoIt wahrscheinlich die Zeichenkette schreiben.
    Diese Inkonsequenz, und dass der AutoIt-Interpreter ständig versucht dem Programmierer das Denken abzunehmen, stiftet 1.) Verwirrung und 2.) Probleme wie hier in diesem Thread beschrieben.

    Im Script 2 liest er ihn in Zeile 13 aber dezimal ein (geht ja wahrscheinlich auch nicht anders) und verwendet die Dezimalzahl in _GDIPlus_BrushCreateSolid($itxtcolor) in Zeile 24 als Parameter, wo er aber in Hex angegeben werden muss.


    Das ist falsch, denn die Funktion erwartet, so wie alles im Computer, einen Zahlenwert für die entsprechende Farbe. Ob diese nun im Dezimal- oder Hexadezimalsystem angegeben wird ist der Funktion in erster Linie scheißegal (s. Absatz 2).

    Just my 2 cent. ;)


    Vorweihnachtliche Grüße
    Greenhorn


  • BugFix , dein Script in dem man die Farben auswählt, hat einen kleinen Fehler, nämlich die Textfarbe wird immer die selbe, wie die des Hintergrundes das ist derzeit jetzt mein Problem, ichdenke wenn wir das hinbekommen dass die Textfarbe unabhängig von der Hintergrundfarbe ausgewählt werden kann, dann wird denke ich der Fehler behoben sein auch...

    Micha_he, das von dir angegebene hat auch nicht ganz hingehauen leider, aber ich denke das hauptProblem ist gerade, dass Hintergrundfarbe und Textfarbe identisch in der Registry geschrieben werden.

    Ich habe das anhand einem ganz kleinen Script geprüft:

    [autoit]

    $reg1 = RegRead("HKEY_CURRENT_USER\SOFTWARE\CountdownScreensaver", "BgColor")
    $reg2 = RegRead("HKEY_CURRENT_USER\SOFTWARE\CountdownScreensaver", "TextColor")

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

    MsgBox(0, "Hintergrundfarbe", "0x" & Hex(Int($reg1)))

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

    Edit: [user='66']BugFix[/user], Sorry Fehler meinerseits natürlich Funktioniert es, ich hatte nur versehentlich auch die Textfarbe aus $index1 lesen lassen :D dadurch ist dann das passiert, jetzt Funktioniert das ganze auch, habe auch wie Greenhorn es gesagt hat mal das REG_DWORD in REG_SZ geändert, und jetzt funktioniert es einwandfrei, vielen dank an euch alle :)
    MsgBox(0, "Textfarbe", "0x" & Hex(Int($reg2)))

    [/autoit]

    In beiden MessageBoxen erscheinen dieselben Werte, woraus ich schließen muss, dass die Textfarbe gleich der Hintergrundfarbe in der Registry geschrieben wird...