@@ -15,7 +15,7 @@ use std::{
15
15
use windows:: {
16
16
core:: { PCSTR , PWSTR } ,
17
17
Win32 :: {
18
- Foundation :: { COLORREF , HANDLE , HWND , MAX_PATH , POINT } ,
18
+ Foundation :: { COLORREF , ERROR_SUCCESS , HANDLE , HWND , MAX_PATH , POINT } ,
19
19
Security :: { GetTokenInformation , TokenElevation , TOKEN_ELEVATION , TOKEN_QUERY } ,
20
20
System :: {
21
21
Registry :: {
@@ -363,6 +363,7 @@ fn is_running_as_admin() -> bool {
363
363
/*
364
364
Enables/disables autostart.
365
365
*/
366
+
366
367
pub fn change_startup ( current_state : bool ) -> windows:: core:: Result < ( ) > {
367
368
let key = HKEY_CURRENT_USER ;
368
369
let mut startup_key = HKEY :: default ( ) ;
@@ -373,7 +374,7 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
373
374
. unwrap_or_default ( )
374
375
. to_string_lossy ( )
375
376
. to_string ( ) ;
376
-
377
+ println ! ( "ran key{}" , current_state ) ;
377
378
unsafe {
378
379
let _ = RegCreateKeyExA (
379
380
key,
@@ -388,14 +389,23 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
388
389
) ;
389
390
390
391
if current_state {
391
- let _ = RegSetValueExA (
392
+ println ! ( "{:?}\n {:?}\n {:?}" , startup_key, app_name, exe_path) ;
393
+
394
+ let result = RegSetValueExA (
392
395
startup_key,
393
396
app_name,
394
397
Some ( 0 ) ,
395
398
REG_SZ ,
396
399
Some ( exe_path. as_bytes ( ) ) ,
397
400
) ;
401
+
402
+ if result == ERROR_SUCCESS {
403
+ println ! ( "Registry key set successfully" ) ;
404
+ } else {
405
+ eprintln ! ( "Failed to set registry key: {:?}" , result) ;
406
+ }
398
407
} else {
408
+ println ! ( "{:?}{:?}" , startup_key, app_name) ;
399
409
let _ = RegDeleteValueA ( startup_key, app_name) ;
400
410
}
401
411
@@ -406,26 +416,36 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
406
416
}
407
417
408
418
/*
409
- Returns if autostart is enabled.
419
+ Returns if autostart is enabled, by checking if the autostart regkey for the current user exists .
410
420
*/
411
421
pub fn get_startup_state ( ) -> bool {
412
- let key = HKEY_CURRENT_USER ;
422
+ let key: HKEY = HKEY_CURRENT_USER ;
413
423
let path_str = PCSTR :: from_raw ( b"Software\\ Microsoft\\ Windows\\ CurrentVersion\\ Run\0 " . as_ptr ( ) ) ;
424
+ let app_name = PCSTR :: from_raw ( b"WinAlpha\0 " . as_ptr ( ) ) ;
425
+
414
426
let mut startup_key = HKEY :: default ( ) ;
427
+ let mut size = 0u32 ;
428
+ let mut buffer: Vec < u8 > = Vec :: with_capacity ( size as usize ) ;
415
429
416
430
unsafe {
417
431
let result = RegOpenKeyExA ( key, path_str, Some ( 0 ) , KEY_READ , & mut startup_key) ;
418
432
419
- if result. is_err ( ) {
433
+ if result != ERROR_SUCCESS {
434
+ eprintln ! ( "Failed to open registry key: {:?}" , result) ;
420
435
return false ;
421
436
}
422
437
423
- let mut buffer: Vec < u8 > = Vec :: with_capacity ( 260 ) ;
424
- let mut size = buffer. len ( ) as u32 ;
425
- let app_name = PCSTR :: from_raw ( b"WinAlpha\0 " . as_ptr ( ) ) ;
438
+ let result = RegQueryValueExA ( startup_key, app_name, None , None , None , Some ( & mut size) ) ;
426
439
427
- buffer. resize ( 260 , 0 ) ;
440
+ if result != ERROR_SUCCESS {
441
+ eprintln ! (
442
+ "Success: Failed to query size for registry key: {:?}" ,
443
+ result
444
+ ) ;
445
+ return false ;
446
+ }
428
447
448
+ // Query the actual value
429
449
let result = RegQueryValueExA (
430
450
startup_key,
431
451
app_name,
@@ -435,7 +455,15 @@ pub fn get_startup_state() -> bool {
435
455
Some ( & mut size) ,
436
456
) ;
437
457
438
- _ = RegCloseKey ( startup_key) ;
439
- result. is_ok ( )
458
+ if result == ERROR_SUCCESS {
459
+ println ! (
460
+ "Found registry key successfully with value: {:?}" ,
461
+ String :: from_utf8_lossy( & buffer)
462
+ ) ;
463
+ return true ;
464
+ } else {
465
+ eprintln ! ( "Failed to query registry key: {:?}" , result) ;
466
+ return false ;
467
+ }
440
468
}
441
469
}
0 commit comments