Похоже, вы добавляете 32 или 0x20 ко второму байту, чтобы включить его:
$myval[1] += 32 # on
$myval[1] -= 32 # off
Битовый, "или" установить "и" с "дополнением бита (не)" для сброса.
0x1e -bor 0x20 # on
62
0x3e -band -bnot 0x20 # off
30
Возможно, вы могли бы сделать перечисление флагов для всех настроек, но вам нужно было бы преобразовать массив байтов в одно большое целое число.
РЕДАКТИРОВАТЬ: О, если Вы просто хотите проверить, установлен ли бит:
$shadowbit = 0x20
if (0x3e -band $shadowbit ) { 'yep' } else { 'nope' } # 32
yep
if (0x1e -band $shadowbit ) { 'yep' } else { 'nope' } # 0
nope
См. также Как установить, очистить и переключить один бит?
РЕДАКТИРОВАТЬ:
Я немного переборщил. Имея это в подготовке:
[Flags()] enum UserPreferencesMask {
ActiveWindowTracking = 0x1
MenuAnimation = 0x2
ComboBoxAnimation = 0x4
ListBoxSmoothScrolling = 0x8
GradientCaptions = 0x10
KeybordCues = 0x20
ActiveWindowTrackingZOrder = 0x40
HotTracking = 0x80
Reserved8 = 0x100
MenuFade = 0x200
SelectionFade = 0x400
ToolTipAnimation = 0x800
ToolTipFade = 0x1000
CursorShadow = 0x2000 # 13
Reserved14 = 0x4000
Reserved15 = 0x8000
Reserved16 = 0x10000
Reserved17 = 0x20000
Reserved18 = 0x40000
Reserved19 = 0x80000
Reserved20 = 0x100000
Reserved21 = 0x200000
Reserved22 = 0x400000
Reserved23 = 0x800000
Reserved24 = 0x1000000
Reserved25 = 0x2000000
Reserved26 = 0x4000000
Reserved27 = 0x8000000
Reserved28 = 0x10000000
Reserved29 = 0x20000000
Reserved30 = 0x40000000
UIEffects = 0x80000000 # 31
}
Вы можете сделать:
$myVal = get-itemproperty 'HKCU:\Control Panel\Desktop' UserPreferencesMask |
% UserPreferencesMask
$b = [bitconverter]::ToInt32($myVal,0)
'0x{0:x}' -f $b
0x80073e9e
[UserPreferencesMask]$b
MenuAnimation, ComboBoxAnimation, ListBoxSmoothScrolling,
GradientCaptions, HotTracking, MenuFade, SelectionFade,
ToolTipAnimation, ToolTipFade, CursorShadow, Reserved16, Reserved17,
Reserved18, UIEffects
[UserPreferencesMask]$b -band 'CursorShadow'
CursorShadow
if ([UserPreferencesMask]$b -band 'CursorShadow') { 'yes' }
yes
Обратите внимание, что 3 недокументированных зарезервированных бита уже используются в моем Windows 10. Это с "show shadows" под указателем мыши "проверено в" параметрах производительности "(расширенная система) на панели управления
ИЛИ, получая просто без перечислений:
$b = [bitconverter]::ToInt32($myVal,0) # 4 bytes from reg_binary to int
if ($b -band [math]::pow(2,13)) { 'cursor shadow' }
Я заметил, что эта запись реестра на самом деле длина 8 байтов, но ввод всех 8 байтов не меняет ответ, даже если некоторые из этих дополнительных битов установлены в windows 10.