引入两个检测进程的api

This commit is contained in:
2026-02-05 20:20:59 +08:00
parent 6460b0b00a
commit 7c94a51aa2
3 changed files with 51 additions and 35 deletions

View File

@@ -70,34 +70,34 @@ mod ffi {
#[serde(default)] #[serde(default)]
pub struct Config { pub struct Config {
/// 做不做每日任务 /// 做不做每日任务
is_daily_missions: bool, is_daily_missions: u8,
/// 做不做群岛 /// 做不做群岛
is_archipelago: bool, is_archipelago: u8,
/// 做不做深渊 /// 做不做深渊
is_spiral_abyss: bool, is_spiral_abyss: u8,
/// 做不做妖气 /// 做不做妖气
is_demonic_energy: bool, is_demonic_energy: u8,
/// 森林 /// 森林
is_forest: bool, is_forest: u8,
/// 分解 /// 分解
is_decompose: bool, is_decompose: u8,
/// 倍攻 /// 倍攻
is_attack_power: bool, is_attack_power: u8,
/// 装备变换 /// 装备变换
is_equip_transform: bool, is_equip_transform: u8,
} }
impl Default for Config { impl Default for Config {
fn default() -> Self { fn default() -> Self {
Self { Self {
is_daily_missions: true, is_daily_missions: 1,
is_archipelago: true, is_archipelago: 1,
is_spiral_abyss: true, is_spiral_abyss: 1,
is_demonic_energy: true, is_demonic_energy: 1,
is_forest: false, is_forest: 0,
is_decompose: true, is_decompose: 1,
is_attack_power: false, is_attack_power: 0,
is_equip_transform: true, is_equip_transform: 1,
} }
} }
} }
@@ -201,65 +201,65 @@ pub(crate) fn save_config(
} }
pub(crate) fn is_daily_missions(this: &Box<Config>) -> bool { pub(crate) fn is_daily_missions(this: &Box<Config>) -> bool {
this.is_daily_missions this.is_daily_missions != 0
} }
pub(crate) fn set_daily_missions(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_daily_missions(this: &mut Box<Config>, flag: bool) {
this.is_daily_missions = flag; this.is_daily_missions = flag as u8;
} }
pub(crate) fn is_archipelago(this: &Box<Config>) -> bool { pub(crate) fn is_archipelago(this: &Box<Config>) -> bool {
this.is_archipelago this.is_archipelago != 0
} }
pub(crate) fn set_archipelago(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_archipelago(this: &mut Box<Config>, flag: bool) {
this.is_archipelago = flag; this.is_archipelago = flag as u8;
} }
pub(crate) fn is_spiral_abyss(this: &Box<Config>) -> bool { pub(crate) fn is_spiral_abyss(this: &Box<Config>) -> bool {
this.is_spiral_abyss this.is_spiral_abyss != 0
} }
pub(crate) fn set_spiral_abyss(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_spiral_abyss(this: &mut Box<Config>, flag: bool) {
this.is_spiral_abyss = flag; this.is_spiral_abyss = flag as u8;
} }
pub(crate) fn is_demonic_energy(this: &Box<Config>) -> bool { pub(crate) fn is_demonic_energy(this: &Box<Config>) -> bool {
this.is_demonic_energy this.is_demonic_energy != 0
} }
pub(crate) fn set_demonic_energy(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_demonic_energy(this: &mut Box<Config>, flag: bool) {
this.is_demonic_energy = flag; this.is_demonic_energy = flag as u8;
} }
pub(crate) fn is_forest(this: &Box<Config>) -> bool { pub(crate) fn is_forest(this: &Box<Config>) -> bool {
this.is_forest this.is_forest != 0
} }
pub(crate) fn set_forest(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_forest(this: &mut Box<Config>, flag: bool) {
this.is_forest = flag; this.is_forest = flag as u8;
} }
pub(crate) fn is_decompose(this: &Box<Config>) -> bool { pub(crate) fn is_decompose(this: &Box<Config>) -> bool {
this.is_decompose this.is_decompose != 0
} }
pub(crate) fn set_decompose(this: &mut Box<Config>, flag: bool) { pub(crate) fn set_decompose(this: &mut Box<Config>, flag: bool) {
this.is_decompose = flag; this.is_decompose = flag as u8;
} }
fn is_attack_power(cfg: &Box<Config>) -> bool { fn is_attack_power(cfg: &Box<Config>) -> bool {
cfg.is_attack_power cfg.is_attack_power != 0
} }
fn set_attack_power(cfg: &mut Box<Config>, value: bool) { fn set_attack_power(cfg: &mut Box<Config>, value: bool) {
cfg.is_attack_power = value; cfg.is_attack_power = value as u8;
} }
fn is_equip_transform(cfg: &Box<Config>) -> bool { fn is_equip_transform(cfg: &Box<Config>) -> bool {
cfg.is_equip_transform cfg.is_equip_transform != 0
} }
fn set_equip_transform(cfg: &mut Box<Config>, value: bool) { fn set_equip_transform(cfg: &mut Box<Config>, value: bool) {
cfg.is_equip_transform = value; cfg.is_equip_transform = value as u8;
} }
pub(crate) fn set_config_value( pub(crate) fn set_config_value(

View File

@@ -142,6 +142,8 @@ fn init_log(is_debug: bool, ws_uel: &CxxString) {
} }
} }
Err(_) => { Err(_) => {
// 先丢弃管道内数据
while let Ok(_) = rx.try_recv() {}
tokio::time::sleep(std::time::Duration::from_secs(2)).await; tokio::time::sleep(std::time::Duration::from_secs(2)).await;
} }
} }

View File

@@ -48,7 +48,9 @@ mod ffi {
fn get_server(cfg: &Box<Login>, index: usize) -> String; fn get_server(cfg: &Box<Login>, index: usize) -> String;
fn is_process_running() -> bool; fn is_process_running(process_name: &CxxString) -> bool;
fn get_process_pid(process_name: &CxxString) -> Vec<u32>;
} }
} }
@@ -106,11 +108,23 @@ pub(crate) fn login_game(p0: &Box<Login>, p1: usize) -> bool {
status.success() status.success()
} }
fn is_process_running() -> bool { fn is_process_running(process_name: &CxxString) -> bool {
let process_name = cxx_string_to_string(process_name);
let mut sys = System::new(); let mut sys = System::new();
sys.refresh_processes(ProcessesToUpdate::All, true); sys.refresh_processes(ProcessesToUpdate::All, true);
sys.processes() sys.processes()
.values() .values()
.any(|p| p.name().eq_ignore_ascii_case("dnf.exe")) .any(|p| p.name().eq_ignore_ascii_case(&process_name))
}
fn get_process_pid(process_name: &CxxString) -> Vec<u32> {
let process_name = cxx_string_to_string(process_name);
let mut sys = System::new();
sys.refresh_processes(ProcessesToUpdate::All, true);
sys.processes()
.values()
.filter(|p| p.name().eq_ignore_ascii_case(&process_name))
.map(|p| p.pid().as_u32())
.collect()
} }