Skip to content

Commit c60d4ab

Browse files
committed
fix: reg key autostart
1 parent e59836f commit c60d4ab

File tree

3 files changed

+52
-23
lines changed

3 files changed

+52
-23
lines changed

.cargo/Config.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
[unstable]
2-
build-std =["alloc", "core", "panic_abort", "proc_macro", "std"]
3-
build-std-features=["panic_immediate_abort"]
1+
# [unstable]
2+
# build-std =["alloc", "core", "panic_abort", "proc_macro", "std"]
3+
# build-std-features=["panic_immediate_abort"]
44

5-
[build]
6-
rustflags=["--cfg=has_std", "-C", "panic=abort", "target-cpu=native"]
5+
# [build]
6+
# rustflags=["--cfg=has_std", "-C", "panic=abort", "target-cpu=native"]
77

8-
[target.x86_64-pc-windows-msvc]
9-
rustflags=["-C", "link-arg=/LIMIT:10240"]
8+
# [target.x86_64-pc-windows-msvc]
9+
# rustflags=["-C", "link-arg=/LIMIT:10240"]

src/main.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![windows_subsystem = "windows"]
1+
// #![windows_subsystem = "windows"]
22
#![feature(let_chains)]
33
use anyhow::Result;
44
use std::sync::Arc;
@@ -19,7 +19,7 @@ use util::{load_config, Message};
1919
use win_utils::{change_startup, get_startup_state};
2020
slint::include_modules!();
2121

22-
#[cfg(target_os = "windows")]
22+
// #[cfg(target_os = "windows")]
2323
#[tokio::main]
2424
async fn main() -> Result<()> {
2525
let (tx, mut rx): (UnboundedSender<Message>, UnboundedReceiver<Message>) =
@@ -60,12 +60,13 @@ async fn main() -> Result<()> {
6060
app_state.set_enable_state(false).await;
6161
}
6262
Message::Startup => {
63-
if !get_startup_state() {
63+
let _ = change_startup(!get_startup_state());
64+
65+
if get_startup_state() {
6466
tray.inner_mut().set_menu_item_label("Startup - True", 5)?;
6567
} else {
6668
tray.inner_mut().set_menu_item_label("Startup - False", 5)?;
6769
}
68-
let _ = change_startup(!get_startup_state());
6970
}
7071
}
7172
}

src/win_utils.rs

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::{
1515
use windows::{
1616
core::{PCSTR, PWSTR},
1717
Win32::{
18-
Foundation::{COLORREF, HANDLE, HWND, MAX_PATH, POINT},
18+
Foundation::{COLORREF, ERROR_SUCCESS, HANDLE, HWND, MAX_PATH, POINT},
1919
Security::{GetTokenInformation, TokenElevation, TOKEN_ELEVATION, TOKEN_QUERY},
2020
System::{
2121
Registry::{
@@ -363,6 +363,7 @@ fn is_running_as_admin() -> bool {
363363
/*
364364
Enables/disables autostart.
365365
*/
366+
366367
pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
367368
let key = HKEY_CURRENT_USER;
368369
let mut startup_key = HKEY::default();
@@ -373,7 +374,7 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
373374
.unwrap_or_default()
374375
.to_string_lossy()
375376
.to_string();
376-
377+
println!("ran key{}", current_state);
377378
unsafe {
378379
let _ = RegCreateKeyExA(
379380
key,
@@ -388,14 +389,23 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
388389
);
389390

390391
if current_state {
391-
let _ = RegSetValueExA(
392+
println!("{:?}\n{:?}\n{:?}", startup_key, app_name, exe_path);
393+
394+
let result = RegSetValueExA(
392395
startup_key,
393396
app_name,
394397
Some(0),
395398
REG_SZ,
396399
Some(exe_path.as_bytes()),
397400
);
401+
402+
if result == ERROR_SUCCESS {
403+
println!("Registry key set successfully");
404+
} else {
405+
eprintln!("Failed to set registry key: {:?}", result);
406+
}
398407
} else {
408+
println!("{:?}{:?}", startup_key, app_name);
399409
let _ = RegDeleteValueA(startup_key, app_name);
400410
}
401411

@@ -406,26 +416,36 @@ pub fn change_startup(current_state: bool) -> windows::core::Result<()> {
406416
}
407417

408418
/*
409-
Returns if autostart is enabled.
419+
Returns if autostart is enabled, by checking if the autostart regkey for the current user exists.
410420
*/
411421
pub fn get_startup_state() -> bool {
412-
let key = HKEY_CURRENT_USER;
422+
let key: HKEY = HKEY_CURRENT_USER;
413423
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+
414426
let mut startup_key = HKEY::default();
427+
let mut size = 0u32;
428+
let mut buffer: Vec<u8> = Vec::with_capacity(size as usize);
415429

416430
unsafe {
417431
let result = RegOpenKeyExA(key, path_str, Some(0), KEY_READ, &mut startup_key);
418432

419-
if result.is_err() {
433+
if result != ERROR_SUCCESS {
434+
eprintln!("Failed to open registry key: {:?}", result);
420435
return false;
421436
}
422437

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));
426439

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+
}
428447

448+
// Query the actual value
429449
let result = RegQueryValueExA(
430450
startup_key,
431451
app_name,
@@ -435,7 +455,15 @@ pub fn get_startup_state() -> bool {
435455
Some(&mut size),
436456
);
437457

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+
}
440468
}
441469
}

0 commit comments

Comments
 (0)