Azt egy picit bonyolult elmagyarázni, hogy pontosan melyik byteot kell átírni, mivel a struktúra hossza a beállítások függvényében még változik is. Amit biztosan mondhatok, hogy a kérdéses byteot a
0xCF 0x28 0x??
bytesorozat előzi meg (értelemszerűen a
0x??
bármi lehet), utána pedig a
0xCA 0x32 0x0E
bytesorozat található. Ezt a fent linkelt PowerShell kód is alátámasztja. Persze az is lehet, hogy csak véletlenül ugyanazokat a beállításokat adta meg a script szerzője is, ezért más beállítások esetén a bytesorozatok eltérhetnek.
* a
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current
kulcs alatt a
Data
értékről van szó
** a Night Light a
%SYSTEM32%\Windows.Shell.BlueLightReduction.dll
-ben van implementálva, de ezt inkább nem akartam visszafejteni
- BaT blogja
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
nem ide :)
- A hozzászóláshoz be kell jelentkezni
Ez menyire gusztustalan mód a beállítások tárolására! Fájt volna rendes registry értékeket használni? Bár ahogy a környékét elnéztem, ez valami új divat. Brrr.
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
Igen, én is abban reménykedtem, hogy külön értékekben tarolódnak ezek a beállítások. De nem tartom kizártnak, hogy van erre rendes API, csak én nem vagyok otthon a Windows programozásban.
- A hozzászóláshoz be kell jelentkezni
UI kellene erre.
--
Blog | @hron84
Üzemeltető macik
- A hozzászóláshoz be kell jelentkezni
>> de ezt inkább nem akartam visszafejteni
:(
>> menyire gusztustalan mód a beállítások tárolására!
az említett kulcs alatt microsoft bonddal szerializált Windows.Data.BlueLightReduction.Settings struktúrát találsz compactbinary (ProtocolType.COMPACT_PROTOCOL, 0x4243, lásd a kulcsban 0x10-nél) formában
>> Amit biztosan mondhatok, hogy a kérdéses byteot a 0xCF 0x28 0x?? bytesorozat előzi meg
>> Azt egy picit bonyolult elmagyarázni, hogy pontosan melyik byteot kell átírni
a Windows.Data.BlueLightReduction.Settings elemei (automaticOnSchedule, automaticOnSunset, targetColorTemperature, manualScheduleBlueLightReductionOnTime, manualScheduleBlueLightReductionOffTime, sunsetTime,...) közül jól szúrtad ki a 40-es (0x28) field azonosítójú int16 típusút (targetColorTemperature):
0xCF 0x28 (1100111100101000) < ez a bond field id és típus ebben az esetben 2 byteon ábrázolva 110tttttiiiiiiii formában, ahol t bitjei 0x0f = BondDataType.BT_INT16-ot adnak, az id pedig az előbb említett 40 (0x28) - az érték tehát nem 1 byteon lesz ábrázolva, hanem kettőn
>> (értelemszerűen a 0x?? bármi lehet)
bizonyos megkötésekkel
>> utána pedig a 0xCA 0x32 0x0E bytesorozat található
esetleg más field, (0xCA egyábként BondDataType.BT_STRUCT típusd ad ha jól tévedek), vagy éppen BT_STOP lezáró
egyszerűbb és biztosabb a 40-es id-re koncentrálni
>> egész pontosan egy byte értéke érdekes, ez (nálam) 0x12 (legalacsonyabb színhőmérséklet) és 0x65 (legmagasabb színhőmérséklet) között változik. Az előbbi érték egy korábbi insider build bejelentése szerint 1200K-nek, utóbbi pedig a f.lux azonos (fehér) beállítása alapján 6500K-nek felel meg. Ha nem hexadecimális, hanem decimális számok lennének, pont jó lenne. :)
az int16 típusú targetColorTemperature érték két byteon tárolódik, a gui segítségével ez (0xE0, 0x12) és (0xC8, 0x65) között állítható
az int16 értékek compactbinary szerializáció esetén zig-zag enkódolva tárolódnak 1hhhhhhh0lllllll formában, ahol csak a h ill. l jelölésű bitek értékesek, esetünkben:
0xC8 0x65 ([1]1001000 [0]1100101) -> 11001011001000 (= 0x32C8 = 13000)
0xE0 0x12 ([1]1100000 [0]0010010) -> 00100101100000 (= 0x0960 = 2400)
zig-zag dekódolva pedig:
dezigzag(13000) = 6500, illetve
dezigzag(2400) = 1200
- A hozzászóláshoz be kell jelentkezni
where do i get out of this chickenshit outfit
- A hozzászóláshoz be kell jelentkezni
Köszi, így már jobban értem. Azt nem, hogy miért így használják a registryt. Vagy miért nem tesznek mellé egy másik értéket, ami a sémára mutat...
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
>> egy másik értéket, ami a sémára mutat
nincs hova mutatni (ezekkel az elnevezésekkel csak a Windows.CloudStore.Schema.Shell.dll-ben és a Windows.Shell.BlueLightReduction-dll-ben találkozol)
- A hozzászóláshoz be kell jelentkezni
"nincs hova mutatni"
Elég baj az! :D
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
Mit szívnak vajon azok, akik ezt így találták ki...?
- A hozzászóláshoz be kell jelentkezni
Wow, kiváló leírás, köszönöm!
Sajnos a Microsoft Bondról még nem hallottam korábban, és ahogy nézem erre az se indok, hogy amúgy a Windows programozáshoz nem értek...
Arra én is gondoltam, hogy 16 bites számról lehet szó, csak sehogy nem jöttek ki értelmes számok. A ZigZag kódolás bennem fel se merült, soha nem használtam még ezt a kódolást. Így valóban értelmesebbek a kapott számok. :)
- A hozzászóláshoz be kell jelentkezni
>> a f.luxban megszokott 3400K értékhez 0x2E-t kell megadni
a fentiek alapján (0x90, 0x35)-öt
- A hozzászóláshoz be kell jelentkezni
Tehát ha jól számolom, amit én megadtam az 2944 és 3170 közé esik, az alsó bytetól függően (ami kódolva 0x80 és 0xfe között lehet).
- A hozzászóláshoz be kell jelentkezni
0x2E esetén 2944 és 3007 közé fog esni (alsó byte 0x80 -> 0x00 .. 0xfe -> 0x7e között mozog)
- A hozzászóláshoz be kell jelentkezni
Jogos, így jár, aki papíron csinálja, a végén egy jobbra shift lemaradt. :)
- A hozzászóláshoz be kell jelentkezni