diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 2fb9f3dcd..356f50df4 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -343,8 +343,10 @@ fn get_capturer(use_yuv: bool) -> ResultType { #[cfg(windows)] let mut captuerer_privacy_mode_id = privacy_mode_id; #[cfg(windows)] - if crate::ui::win_privacy::is_process_consent_running()? { - captuerer_privacy_mode_id = 0; + if captuerer_privacy_mode_id != 0 { + if crate::ui::win_privacy::is_process_consent_running()? { + captuerer_privacy_mode_id = 0; + } } log::debug!( "Try create capturer with captuerer privacy mode id {}", diff --git a/src/ui/win_privacy.rs b/src/ui/win_privacy.rs index 0bbb040ec..9944bf262 100644 --- a/src/ui/win_privacy.rs +++ b/src/ui/win_privacy.rs @@ -5,6 +5,7 @@ use crate::{ use hbb_common::{allow_err, bail, lazy_static, log, tokio, ResultType}; use std::{ ffi::CString, + os::windows::process::CommandExt, sync::Mutex, time::{Duration, Instant}, }; @@ -24,7 +25,9 @@ use winapi::{ CreateProcessAsUserW, GetCurrentThreadId, QueueUserAPC, ResumeThread, PROCESS_INFORMATION, STARTUPINFOW, }, - winbase::{WTSGetActiveConsoleSessionId, CREATE_SUSPENDED, DETACHED_PROCESS}, + winbase::{ + WTSGetActiveConsoleSessionId, CREATE_NO_WINDOW, CREATE_SUSPENDED, DETACHED_PROCESS, + }, winnt::{MEM_COMMIT, PAGE_READWRITE}, winuser::*, }, @@ -317,6 +320,7 @@ fn wait_find_privacy_hwnd(msecs: u128) -> ResultType { pub fn is_process_consent_running() -> ResultType { let output = std::process::Command::new("cmd") .args(&["/C", "tasklist | findstr consent.exe"]) + .creation_flags(CREATE_NO_WINDOW) .output()?; Ok(output.status.success() && !output.stdout.is_empty()) }