You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EnumWindows实际行为问询:为何仅枚举到Default IME窗口

EnumWindows 的实际行为疑问

我参考了MSDN文档,同时也了解到EnumChildWindows,Rust相关文档仅为存根内容。我原本认为EnumWindows会枚举所有顶级(应用程序)窗口,并为每个窗口调用传入的回调函数,但实际仅获取到Default IME窗口。

相关代码细节

定义静态数组存储窗口句柄

const HWNDS_LENGTH: usize = 20; // Never going to use all this
static mut HWNDS_COLLECTION: [Option<HWND>; HWNDS_LENGTH] = [None; HWNDS_LENGTH];

回调函数始终返回true,不会提前终止枚举

unsafe extern "system" fn enumeration_callback(hwnd: HWND, _: LPARAM) -> BOOL {
    for i in HWNDS_LENGTH..0 {
        match HWNDS_COLLECTION[i] {
            Some(_) => {}
            None => {HWNDS_COLLECTION[i] = Some(hwnd); break}
        }
    }
    HWNDS_COLLECTION[0] = Some(hwnd);
    BOOL::from(true)
}

主函数调用EnumWindows并收集窗口句柄

fn main() -> () {
    let mut tracked_windows = vec![];
    unsafe {
        EnumWindows(Some(enumeration_callback), LPARAM(*&0)).expect("Failed to get windows");
        for x in HWNDS_COLLECTION {
            match x {
                None => {}
                Some(y) => {
                    match query_window(y) {
                        true => {tracked_windows.push(y)}
                        false => {}
                    }
                }
            }
        }
    }
}

我在回调中添加打印语句后,发现仅收到一个窗口,这与文档描述不符。我明确询问EnumWindows的实际行为,不涉及代码修复相关建议。

内容的提问来源于stack exchange,提问作者TimothyH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:37:15