@@ -6,7 +6,7 @@ use windows_sys_loader::Win32::System::Console::{
66} ;
77
88use super :: log:: { write_banner_line, ANSI_CYAN } ;
9- use super :: state:: LoaderState ;
9+ use super :: state:: { LoaderState , OutputSink } ;
1010use super :: { hash, pe} ;
1111
1212const CP_UTF8 : u32 = 65001 ;
@@ -15,30 +15,50 @@ const ANSI_GRAY: &str = "\x1b[37m";
1515// TODO: 控制台图标(SetConsoleIcon / 嵌入 RT_ICON 资源)
1616// TODO: 控制台字体大小/窗口尺寸调整
1717
18- pub unsafe fn init ( state : & mut LoaderState ) {
19- AllocConsole ( ) ;
18+ pub unsafe fn init ( state : & mut LoaderState , console_enabled : bool ) {
19+ if console_enabled {
20+ AllocConsole ( ) ;
21+ }
2022
2123 let handle = GetStdHandle ( STD_OUTPUT_HANDLE ) ;
2224 if handle. is_null ( ) || handle == INVALID_HANDLE_VALUE {
2325 return ;
2426 }
2527
26- SetConsoleOutputCP ( CP_UTF8 ) ;
27- SetConsoleTitleA ( b"ChuModLoader\0 " . as_ptr ( ) ) ;
28+ if console_enabled {
29+ SetConsoleOutputCP ( CP_UTF8 ) ;
30+ SetConsoleTitleA ( b"AppleChu\0 " . as_ptr ( ) ) ;
31+ }
2832
29- enable_ansi ( handle) ;
30- state. console = handle;
33+ state. output = match console_ansi_enabled ( handle, console_enabled) {
34+ Some ( ansi_enabled) => OutputSink :: Console {
35+ handle,
36+ ansi_enabled,
37+ } ,
38+ None => OutputSink :: Stream ( handle) ,
39+ } ;
3140
3241 print_banner ( state) ;
3342}
3443
35- unsafe fn enable_ansi ( handle : windows_sys_loader:: Win32 :: Foundation :: HANDLE ) {
44+ unsafe fn console_ansi_enabled (
45+ handle : windows_sys_loader:: Win32 :: Foundation :: HANDLE ,
46+ configure : bool ,
47+ ) -> Option < bool > {
3648 let mut mode: u32 = 0 ;
37- if GetConsoleMode ( handle, & mut mode) != 0 {
38- SetConsoleMode (
39- handle,
40- mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING ,
41- ) ;
49+ if GetConsoleMode ( handle, & mut mode) == 0 {
50+ return None ;
51+ }
52+
53+ if configure {
54+ Some (
55+ SetConsoleMode (
56+ handle,
57+ mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING ,
58+ ) != 0 ,
59+ )
60+ } else {
61+ Some ( mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 )
4262 }
4363}
4464
@@ -57,7 +77,7 @@ fn print_banner(state: &mut LoaderState) {
5777 } ;
5878
5979 write_banner_line ( state, ANSI_CYAN , sep) ;
60- write_banner_line ( state, ANSI_CYAN , & format ! ( "ChuModLoader v{version} Nya~ " ) ) ;
80+ write_banner_line ( state, ANSI_CYAN , & format ! ( "AppleChu v{version} Nya~ " ) ) ;
6181 write_banner_line ( state, ANSI_GRAY , & format ! ( "OS: {}" , os_version( ) ) ) ;
6282 write_banner_line ( state, ANSI_GRAY , & format ! ( "Hash Code: {hash_code}" ) ) ;
6383 write_banner_line ( state, ANSI_CYAN , sep) ;
0 commit comments