11using SecondaryClick . WinApi ;
2- using System . Text ;
32
43namespace SecondaryClick ;
54
@@ -63,7 +62,7 @@ public T Get()
6362 return ( T ) ( object ) stringValue ;
6463 }
6564
66- if ( valueType == Advapi32 . REG_DWORD && data . Length >= sizeof ( int ) )
65+ if ( RegistryApi . IsDwordType ( valueType ) && data . Length >= sizeof ( int ) )
6766 {
6867 int intValue = BitConverter . ToInt32 ( data , 0 ) ;
6968 return ( T ) Convert . ChangeType ( intValue , typeof ( T ) ) ;
@@ -80,101 +79,25 @@ public T Get()
8079
8180 public void Set ( T value )
8281 {
83- int createResult = Advapi32 . RegCreateKeyEx (
84- Advapi32 . HKEY_CURRENT_USER ,
85- RegistryPath ,
86- 0 ,
87- null ,
88- 0 ,
89- Advapi32 . KEY_SET_VALUE ,
90- IntPtr . Zero ,
91- out IntPtr keyHandle ,
92- out _ ) ;
93-
94- if ( createResult != Win32Error . ERROR_SUCCESS )
95- return ;
96-
97- try
98- {
99- if ( typeof ( T ) == typeof ( bool ) )
100- {
101- bool boolValue = ( bool ) ( object ) value ! ;
102- byte [ ] data = BitConverter . GetBytes ( boolValue ? 1 : 0 ) ;
103- _ = Advapi32 . RegSetValueEx (
104- keyHandle ,
105- _name ,
106- 0 ,
107- Advapi32 . REG_DWORD ,
108- data ,
109- data . Length ) ;
110- return ;
111- }
112-
113- string stringValue = value ? . ToString ( ) ?? string . Empty ;
114- int dataSize = ( stringValue . Length + 1 ) * sizeof ( char ) ;
115- _ = Advapi32 . RegSetValueEx (
116- keyHandle ,
117- _name ,
118- 0 ,
119- Advapi32 . REG_SZ ,
120- stringValue ,
121- dataSize ) ;
122- }
123- finally
82+ if ( typeof ( T ) == typeof ( bool ) )
12483 {
125- _ = Advapi32 . RegCloseKey ( keyHandle ) ;
84+ bool boolValue = ( bool ) ( object ) value ! ;
85+ _ = RegistryApi . SetDwordCurrentUser ( RegistryPath , _name , boolValue ? 1 : 0 ) ;
86+ return ;
12687 }
88+
89+ string stringValue = value ? . ToString ( ) ?? string . Empty ;
90+ _ = RegistryApi . SetStringCurrentUser ( RegistryPath , _name , stringValue ) ;
12791 }
12892
12993 private bool TryReadRegistryValue ( out uint valueType , out byte [ ] data )
13094 {
131- valueType = 0 ;
132- data = [ ] ;
133-
134- int openResult = Advapi32 . RegOpenKeyEx (
135- Advapi32 . HKEY_CURRENT_USER ,
136- RegistryPath ,
137- 0 ,
138- Advapi32 . KEY_QUERY_VALUE ,
139- out IntPtr keyHandle ) ;
140-
141- if ( openResult != Win32Error . ERROR_SUCCESS )
142- return false ;
143-
144- try
145- {
146- uint dataSize = 0 ;
147- int queryResult = Advapi32 . RegQueryValueEx (
148- keyHandle ,
149- _name ,
150- 0 ,
151- out valueType ,
152- null ,
153- ref dataSize ) ;
154-
155- if ( queryResult != Win32Error . ERROR_SUCCESS || dataSize == 0 )
156- return false ;
157-
158- data = new byte [ dataSize ] ;
159- queryResult = Advapi32 . RegQueryValueEx (
160- keyHandle ,
161- _name ,
162- 0 ,
163- out valueType ,
164- data ,
165- ref dataSize ) ;
166-
167- return queryResult == Win32Error . ERROR_SUCCESS ;
168- }
169- finally
170- {
171- _ = Advapi32 . RegCloseKey ( keyHandle ) ;
172- }
95+ return RegistryApi . TryReadRawCurrentUser ( RegistryPath , _name , out valueType , out data ) ;
17396 }
17497
17598 private static bool ConvertToBool ( uint valueType , byte [ ] data )
17699 {
177- if ( valueType == Advapi32 . REG_DWORD && data . Length >= sizeof ( int ) )
100+ if ( RegistryApi . IsDwordType ( valueType ) && data . Length >= sizeof ( int ) )
178101 {
179102 return BitConverter . ToInt32 ( data , 0 ) != 0 ;
180103 }
@@ -191,6 +114,6 @@ private static bool ConvertToBool(uint valueType, byte[] data)
191114
192115 private static string DecodeString ( byte [ ] data )
193116 {
194- return Encoding . Unicode . GetString ( data ) . TrimEnd ( ' \0 ' ) ;
117+ return RegistryApi . DecodeUnicodeString ( data ) ;
195118 }
196119}
0 commit comments