German Falscher Wert bei Reg.GetInt und Reg.GetValue

Discussion in 'German Forum' started by Amalkotey, Aug 15, 2009.

  1. Amalkotey

    Amalkotey Active Member Licensed User

    Hallo,

    ich versuche mittels der Registry-Lib den Wert aus dem Schlüssel

    Code:
    HKCU\ControlPanel\Volume\Volume
    auszulesen. Statt den gespeicherten Wert erhalte ich aber -1 als Ergebnis. Mit den Nachfolgenden Codezeilen wird der Wert ausgelesen:

    Code:
    Reg.RootKey(Reg.rtCurrentUser)
    Value = Reg.GetValue(
    "ControlPanel\Volume""Volume")   ' Value = Reg.GetInt("ControlPanel\Volume", "Volume")
    Weiß jemand wo der Fehler ist?

    Viele Grüsse
    Amalkotey
     
    Last edited: Aug 15, 2009
  2. specci48

    specci48 Well-Known Member Licensed User

    Wenn man ehrlich ist ... in der Dll selbst ...

    Laut Hilfe liefert getValue folgendes:

    GetValue can return four different types of data:
    String - If the value is of type REG_SZ.
    Integer - If the value is of type REG_DWORD
    Bytes Array - If the value is of type REG_BINARY.
    String Array - If the value is of type REG_MULTI_SZ.

    Der Volume-Eintrag in der Registry ist vom Typ REG_DWORD, wird durch die Dll leider als Integer (konkret vom Type Int32) zurückgegeben. Der Befehl getInt gibt auch nur einen Wert vom Typ Int32 zurück. Somit sind große Volume Werte nicht korrekt ermittelbar.

    Deutlich wird das ganze, wenn Du den Wert bei verschiedenen Lautstärken ausliest:
    - stellst Du Deinen PDA stumm, gibt es den richtigen Wert 0.
    - stellst Du Deinen PDA auf minimale Lautstärke, gibt es auch einen richtigen Wert
    - stellst Du die Lautstärke immer höher, dann wird der ausgelesene Wert irgendwann negativ (durch die Int32-Konvertierung)
    - und irgendwann (bei mir z.B. bei voller Lautstärke) wird daraus eine -1

    Leider habe ich auch keine Lösung parat, wie man den Eintrag immer korrekt erhält. Ggf. sollten wir mal Erel fragen, ob er den Rückgabewert in der Dll z.B. auf einen Int64 ändern kann.


    specci48
     
  3. Amalkotey

    Amalkotey Active Member Licensed User

    qSpeccie48:

    Ja du hast recht. Ich habe mir mal die RegistryDevice.cs angeschaut. Ich dachte Erel macht hier einen Cast. Weit gefehlt, er holt die Daten aus einem Buffer-String, welche mit einer Bitconvertierung nach Int32 durchführt.

    Ich habe mir jetzt was anderes einfallen lassen. Der Wert für die Lautstärke wird aus durch

    Code:
    HKCU\ControlPanel\SoundCategories\System\InitVol
    Dieser Wert erfaßt die 6 Zuständer der Lautstärke, welche ich jetzt Abfrage. Beim Verändern der Lautstärke kann ich ohne Probleme dem Wert in

    Code:
    HKCU\ControlPanel\Volume\Volume
    schreiben. vielen Dank für Deine Hilfe.

    Gruss
    Amalkotey
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice