易语言封装大漠插件:窗口类名与窗口标题获取实战
做Windows桌面自动化的人很多都绕不开“大漠插件”这四个字。我这阵子在用易语言封装一套大漠API的窗口信息模块核心功能就是取窗口类名和窗口标题。功能听起来很简单实际一封装就发现细节特别多权限问题、64位兼容性、插件初始化时序、句柄有效性判断哪一步没处理好返回给你就是个空文本。这个模块能干什么往小了说拿到一个窗口句柄后你可以随时读它的类名、标题确认自己有没有抓错窗口往大了说它是后续窗口控制、后台键鼠、自动化测试脚本的地基——定位不准后面全白搭。如果你正在用易语言写PC桌面自动化、想做一套自己的窗口工具库或者只是想把大漠常用接口整理成模块方便复用这篇内容应该能帮你少踩不少坑。1. 这个模块到底解决什么问题1.1 窗口类名和窗口标题的区别与用途先明确一个基本概念Windows系统里每个窗口都属于某个“窗口类”这个类名在窗口创建时由程序注册窗口存续期间一般不会变而“窗口标题”是标题栏上的文字它是动态的随时可以被程序自己改掉。举个例子某个软件的窗口类名始终是TTestMainForm但标题可能是“报表工具 V3.2 - 未登录”也可能是“报表工具 V3.2 - 管理员”。你如果只靠标题去定位窗口版本号一变、登录状态一变脚本就得跟着改。而窗口类名稳定把“类名 标题关键词”组合起来匹配定位成功率会高很多。所以这个模块的价值不只是“读出两个字符串”而是给你一套稳定的窗口识别方案。在自动化脚本里第一件事永远是拿句柄句柄拿对了后面不管是操作还是读取数据心里才有底。1.2 为什么用易语言封装一套自己的模块大漠插件本身已经提供了GetWindowClass、GetWindowTitle这些接口直接调用也很快。但裸调的问题在于每次写脚本都要重新写初始化、错误判断、参数校验重复劳动项目里多个脚本对窗口信息的处理逻辑不一致有的返回空文本有的返回null有的干脆不判断直接往下走后面就莫名报错脚本和业务代码混在一起排查问题时分不清是接口调用失败还是自己的逻辑写错。封装成易语言模块.ec后我把所有重复逻辑收敛到几个子程序里业务脚本只关心“传入窗口句柄拿到类名/标题”。团队协作时大家用同一套模块标准统一排查问题也好定位。这也是我觉得“模块化”对易语言项目特别重要的原因——很多易语言代码写到最后都是几百行全在窗口程序集里改起来非常痛苦。2. 基础原理与准备工作2.1 Windows窗口信息机制简析说实话易语言封装大漠取窗口类名标题本质上是在调Windows窗口管理机制。可以不深究底层但有几点理解透了排查问题会快很多。**句柄HWND**是窗口的“门牌号”是一个整数。系统通过这个值来识别到底要对哪个窗口操作。大漠的很多接口第一步都是先拿到句柄然后再做后续动作。窗口类名由RegisterClass注册系统用它来区分不同类型的窗口。同一个程序可能注册多个窗口类比如主窗口一个类名、子窗口一个类名、弹窗一个类名。所以准确地说“取窗口类名”拿到的是该窗口所属类的名字不代表程序名。窗口标题则是窗口创建时的dwStyle配合SetWindowText等接口动态设置的。很多程序在运行期间会反复修改标题比如进度条窗口、播放器窗口标题几乎每秒都在变。这类窗口如果靠标题精确匹配很容易翻车。窗口的层级关系也是一样需要留意的桌面窗口下是顶级窗口顶级窗口下有子窗口。大漠的FindWindow默认查找的是顶层窗口如果想拿某个子窗口的类名和标题需要先枚举子窗口或者用FindWindowEx一类接口配合。2.2 大漠插件调用基础与模块骨架大漠插件在易语言里通常以COM组件方式使用。核心流程三步注册/加载插件创建对象一般对应dm.dmsoft这个ProgID调用接口方法。易语言的“对象”数据类型可以直接绑定COM组件 创建大漠对象 大漠对象.创建 (dm.dmsoft)创建成功之后调用接口就很直白了 根据窗口标题查找窗口句柄 窗口句柄 大漠对象.FindWindow (, 计算器, 1) 根据句柄取窗口类名 窗口类名 大漠对象.GetWindowClass (窗口句柄) 根据句柄取窗口标题 窗口标题 大漠对象.GetWindowTitle (窗口句柄)这里有个非常容易踩的坑大漠对象初始化失败时对象是无效的如果没判断就直接调用接口程序大概率会崩溃或者所有返回结果都是空值/负数。所以模块封装时第一件事永远是“初始化判断”。2.3 环境准备与插件注册正规渠道拿到并安装大漠插件后一般需要注册组件。常见做法是把dm.dll放到固定目录然后用regsvr32注册regsvr32 dm.dll注册时用管理员权限打开命令行否则可能提示“模块加载失败”或“拒绝访问”。如果你的程序发布到别的电脑要么提前注册好要么在程序启动时配合插件自带的接口做免注册调用。我个人更推荐用免注册调用方式省去目标机器上手动注册的麻烦。不过要注意杀毒软件对大漠这类自动化组件的敏感度较高发布前尽量测试一下目标环境的拦截情况。易语言侧不需要额外支持库普通对象数据类型就够了。但是建议把项目配置里的“编译选项”设置为使用ASCII或Unicode并确认子程序参数类型与接口文档一致。大漠接口中FindWindow的窗口标题参数是文本型窗口句柄是整数型返回的类名/标题是文本型类型不匹配会出现乱码或调用失败。3. 模块功能结构设计3.1 模块内部子程序清单我设计模块时没有只做“取类名”和“取标题”两个子程序而是把窗口定位相关的一整套接口都收了进来这样以后写任何自动化脚本都能直接复用同一套东西。模块内部大致包含子程序名功能关键参数返回值初始化大漠创建大漠对象并检查状态可选日志开关逻辑型是否初始化成功取窗口句柄_按标题根据标题精确查找窗口标题文本整数型句柄取窗口句柄_模糊匹配根据标题关键词查找关键词文本整数型句柄取窗口句柄_按类名根据类名精确查找类名文本整数型句柄取窗口类名根据句柄获取类名窗口句柄文本型类名取窗口标题根据句柄获取标题窗口句柄文本型标题取窗口状态判断窗口是否有效/可见窗口句柄逻辑型释放对象销毁大漠对象无无这套结构的思路是查找和取值分开查找负责拿句柄取值负责读信息。好处是灵活你可以在一个窗口上先取类名再取标题也可以用类名查到的句柄去反查标题甚至组合出“标题模糊匹配 类名校验”的双条件定位流程。3.2 关键函数设计与返回约定模块设计时还需要统一返回值约定这是很多人容易忽略的地方。我统一约定返回空文本 表示读取失败或参数无效返回0表示窗口句柄无效或窗口未找到初始化失败时所有查找类子程序都直接返回0不继续向下执行。这么做的好处非常明显调用方只要判断返回值是否为空/0不需要关心底层具体发生了什么。如果返回值异常再去看日志或做详细排查。统一约定也能避免团队里“一个接口返回0另一个返回-1”这种混乱。关于日志我在模块内部加了一个可空参数打开后会输出错误信息到调试输出。平时脚本跑得好好的但发布到客户机器上就找不到窗口这种情况太常见了。如果模块里预留日志口子记下查找窗口时用了什么关键词、有没有找到、句柄是多少排查效率能高一个量级。4. 完整实现与调用示例4.1 模块核心源码示例下面给出我封装时的核心逻辑易语言风格示例实际项目中你可能需要根据自己安装的插件版本微调接口名但整体结构可以直接套。.版本 2 .程序集 窗口信息模块 .程序集变量 大漠对象, 对象 .程序集变量 模块已初始化, 逻辑型 .子程序 初始化大漠, 逻辑型 .参数 输出日志, 逻辑型, 可空 .如果真 (输出日志) 输出调试文本 (“开始初始化大漠对象...”) .如果真结束 大漠对象.创建 (“dm.dmsoft”, ) 模块已初始化 取反 (大漠对象.是否为空 ()) .如果真 (模块已初始化 假) 输出调试文本 (“大漠对象创建失败请检查组件注册状态”) 返回 (假) .如果真结束 返回 (真) .子程序 取窗口句柄_模糊匹配, 整数型 .参数 标题关键词, 文本型 .参数 父窗口句柄, 整数型, 可空 .如果真 (模块已初始化 假) 返回 (0) .如果真结束 返回 (大漠对象.FindWindow (“”, 标题关键词, 1)) .子程序 取窗口句柄_按类名, 整数型 .参数 类名, 文本型 .参数 父窗口句柄, 整数型, 可空 .如果真 (模块已初始化 假) 返回 (0) .如果真结束 返回 (大漠对象.FindWindow (类名, “”, 1)) .子程序 取窗口类名, 文本型 .参数 窗口句柄, 整数型 .如果真 (窗口句柄 ≤ 0) 返回 (“”) .如果真结束 .如果真 (模块已初始化 假) 返回 (“”) .如果真结束 返回 (大漠对象.GetWindowClass (窗口句柄)) .子程序 取窗口标题, 文本型 .参数 窗口句柄, 整数型 .如果真 (窗口句柄 ≤ 0) 返回 (“”) .如果真结束 .如果真 (模块已初始化 假) 返回 (“”) .如果真结束 返回 (大漠对象.GetWindowTitle (窗口句柄))注意FindWindow的第三个参数不同版本含义略有不同一般是匹配模式0精确匹配、1模糊匹配。我在子程序里把“模糊/精确”的选择提前拆分成了不同子程序调用侧更直观不会搞混。关于“取窗口句柄_按标题”和“取窗口句柄_模糊匹配”我实际使用中更常用模糊匹配因为很多程序的窗口标题会附加文档名、用户名、版本号等动态信息。模糊匹配配合后续的“再取一次类名做校验”能极大减少找错窗口的概率。如果只是取类名测试精确查找也够用。4.2 调用示例批量提取窗口信息模块封装好之后调用端可以写得很干净。我这里给一个类似“窗口信息探测器”的示例遍历当前几个已知窗口把句柄、类名、标题都提取出来输出到调试窗口或编辑框。.子程序 测试窗口信息提取 .局部变量 句柄1, 整数型 .局部变量 句柄2, 整数型 .局部变量 类名, 文本型 .局部变量 标题, 文本型 初始化大漠 () 查找两个目标窗口 句柄1 取窗口句柄_模糊匹配 (“记事本”) 句柄2 取窗口句柄_模糊匹配 (“计算器”) 读取窗口信息并输出 类名 取窗口类名 (句柄1) 标题 取窗口标题 (句柄1) 输出调试文本 (“窗口1 句柄:” 到文本 (句柄1), “类名:” 类名, “标题:” 标题) 类名 取窗口类名 (句柄2) 标题 取窗口标题 (句柄2) 输出调试文本 (“窗口2 句柄:” 到文本 (句柄2), “类名:” 类名, “标题:” 标题)我在实际开发中还会加一个“等待窗口出现”的循环用取窗口句柄_模糊匹配去查如果返回0延时几百毫秒再查最多循环N次。很多自动化脚本失败就是因为窗口还没加载完就急着往下执行加了这个等待机制后稳定性明显提升。4.3 封装为易语言模块文件子程序调试没问题后就可以把它们保存为易语言模块.ec。新建“易语言模块”工程把上面这些子程序按类别填进去设置好模块描述、版本、作者信息编译即可生成模块文件。然后在主程序中“插入”“模块引用”加载这个模块文件就可以像使用系统支持库一样调用取窗口类名等子程序了。有一点要特别提醒模块编译后如果大漠对象创建失败模块内部必须能自己知道不能继续往后执行。我在模块里用了全局变量模块已初始化记录状态在每次调用时都先判断一下。这样即使业务代码调用时机错了顶多返回空值不会导致整个程序崩溃。5. 常见问题与排查技巧实录5.1 常见问题速查表我把实际使用中遇到的典型问题整理成了一个速查表方便对照排查现象可能原因解决办法大漠对象创建失败插件未注册、被杀毒拦截、权限不足用管理员身份注册组件或将插件放到可信目录测试FindWindow找不到窗口窗口标题变化、窗口未加载、查找的是子窗口改用模糊匹配关键词加等待循环或先枚举子窗口取窗口类名返回空文本句柄无效、对象未初始化、目标窗口特殊验证句柄是否大于0查看日志检查权限取窗口标题乱码文本编码参数设置不对检查易语言文本编码设置确认大漠接口返回类型程序在客户机上不能用插件未注册、杀毒拦截、缺少运行库发布时做免注册调用或提前部署组件测试白名单环境窗口句柄偶尔有效偶尔无效窗口反复销毁重建每次操作前重新获取句柄不要缓存句柄复用其中最容易忽略的是“窗口反复销毁重建”。很多程序在切换页面时窗口不是隐藏而是直接销毁、重新创建这时你之前缓存的句柄就失效了。所以我在模块设计时暴露的都是“传入句柄读取信息”的子程序句柄的获取每次都由业务代码调用不跨操作缓存能少踩很多类似坑。5.2 权限与兼容性排查窗口信息读取看起来是个很轻的操作但它同样受Windows权限模型影响。尤其是以普通权限运行的易语言程序去读取以管理员权限运行的进程窗口信息时可能读到空标题或空类名。这不是代码问题而是系统限制。解决办法通常是软件启动时申请管理员权限或者在项目配置中嵌入UAC清单。易语言里可以通过“修改程序图标资源”或附加清单文件的方式实现也有第三方支持库方便处理。实测下来只要目标窗口是普通权限一般没问题跨权限读取资料时最稳的还是让主程序以管理员权限运行。64位兼容性也是常见问题。易语言默认编译出的程序是32位操作64位系统上的很多窗口没问题但某些受WOW64机制影响的窗口读取类名可能不完整。如果你的目标程序是64位且大漠插件提供了64位版本建议主程序按64位目标重新编译并选用对应的64位插件组件。我这里踩过一次坑32位程序读某个64位设计的自绘窗口类名读到的是乱码切换64位组件后一切正常。5.3 如何验证取到的类名和标题是正确的调试时不要只看一眼“读到值了”就认为成功。我会做三件事来验证用系统自带的窗口查看工具比如Spy类工具去对比同一个窗口的真实类名和标题确认大漠返回的一致连续调用两次取类名和取标题对比结果是否稳定排除偶发读取失败故意传入一个无效句柄比如0确认模块能正确返回空文本而不会异常崩溃。这样验证过之后再往后续业务里接心里就有底了。我也是在反复验证中才发现有些程序窗口的类名在运行时会被动态修改不能默认“类名永远不变”做窗口匹配时最好“类名 标题”组合校验而不是只依赖其中一项。6. 扩展方向与个人实操体会6.1 从“取类名标题”扩展成窗口信息工具箱模块基础打好之后扩展方向很多。我自己在基础模块上又加了几个常用函数取窗口大小和位置、取窗口进程路径、窗口置顶/还原、窗口截图。有了这些前端可以做一个窗口信息管理工具后端就是一个个独立模块新脚本直接复用不需要再从零写。另一个很实用的方向是“批量窗口信息导出”。把枚举到的所有顶层窗口的句柄、类名、标题整理成文本文件或表格能快速梳理一台机器上哪些软件在跑、主窗口是什么类名。这类功能在远程排查问题、软件兼容性测试时特别有用。如果要做自动化测试框架还可以把“窗口出现等待”“窗口失去响应检测”“句柄有效性轮询”这些都统一封装进模块。你会发现到了这一步之前写的取类名标题模块变成了整个测试框架里最稳定、最值得依赖的那块地基。6.2 踩过几次坑之后的几点体会实际操作中我最大的体会是窗口管理类接口不怕慢就怕不判断。很多新手写自动化脚本拿句柄、取类名、取标题三步一气呵成中间没有任何失败判断结果窗口没出现时拿到的是一堆0和空白后面的操作全部跟着崩。现在我的所有子程序第一步一定是参数校验第二步是初始化校验第三步才是真正调用接口。另一个体会是能用一条FindWindow解决的问题就别折腾枚举。大漠枚举窗口接口功能强但写起来复杂而且遇到子窗口时回调参数容易搞混。做顶层窗口类名和标题提取先用FindWindow按标题关键词查查不到再换类名查顺序升级远比一上来就写一堆枚举逻辑好用。最后一个小建议即使你的模块已经封装完也建议保留一个“调试模式”入口。我在模块里留了一个输出日志的开关平时关掉遇到问题打开能看到每次查找窗口的输入输出。这套做法帮我省了大量时间去猜“为什么找不到窗口”——很多问题根本是窗口标题带了特殊字符或者窗口还没创建完日志一打出来立刻清清楚楚。窗口类名和标题这个功能在文档目录里看起来就是两个简单的API实际用起来牵扯出来的东西其实不少。从模块化设计、返回约定到权限兼容性、调试日志每一项都直接影响脚本的稳定程度。希望这篇内容能帮你把基础模块做得更顺手后续不管接什么自动化需求都不用在窗口定位这一步反复折腾。

相关新闻

从Word成绩表到数据库:结构化处理与SQL分析实战

从Word成绩表到数据库:结构化处理与SQL分析实战

简介:这份成绩登记表(2).doc面向中小学教师、班主任及教务管理人员,用于日常记录与管理班级学生的语文学习成绩,解决手工登记易出错、统计口径不统一的问题。压缩包内共1个doc文档,约153KB,属于…

2026/10/13 19:35:12 阅读更多 →
SpringBoot+微信小程序+uni-app农产品交易平台全栈项目实战解析

SpringBoot+微信小程序+uni-app农产品交易平台全栈项目实战解析

做这个基于SpringBoot的微信小程序农产品交易平台,前后花了大概两个月时间。整套项目包含SpringBoot后端、基于Vue语法的uni-app小程序端、Vue3管理后台,源码、文档、SQL脚本、调试说明都整理齐了,本地跑通也就一天的事。这篇文章我就拿这套项…

2026/10/13 19:35:12 阅读更多 →
CEEMD算法详解:MATLAB实现与参数调优,解决模态混叠和噪声残留

CEEMD算法详解:MATLAB实现与参数调优,解决模态混叠和噪声残留

简介:这套CEEMD(完全集合经验模态分解)的MATLAB实现代码带有逐段中文注释,主要面向需要分析非线性、非平稳信号的科研人员、算法工程师及高年级本科生,也适合希望弄清EMD与CEEMD区别、并将分解算法用于实际数据的读者。…

2026/10/13 19:35:12 阅读更多 →

最新新闻

从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

直接做Agent应用的人,这两年应该都有同感:单个Agent的对话能力已经不是瓶颈了,真正拉开差距的是Agent能不能稳定地调用外部能力、按流程完成任务。我最近在整理和重构一个内部项目,名字就叫“agent-skills”,本质上是一…

2026/10/13 20:34:36 阅读更多 →
基于MATLAB的脑电功率谱与多尺度熵分析工具箱实战解析

基于MATLAB的脑电功率谱与多尺度熵分析工具箱实战解析

简介:面向脑电信号分析的多尺度熵计算MATLAB代码包,主要服务神经科学、生物医学工程等领域的科研人员与工程师,可用于处理多通道EEG数据,完成从二进制文件读取、预处理、多尺度熵计算到频谱分析、批量统计的完整流程。代码由杨博士…

2026/10/13 20:34:36 阅读更多 →
用litellm搭建统一模型网关,解决多模型接入难题

用litellm搭建统一模型网关,解决多模型接入难题

1. 做了个模型网关,解决了我最头疼的多模型接入问题先交代一下背景。上个月要给一个内部工具接大模型能力,一开始需求很简单:调一个对话接口,把结果返回给前端就行。结果做着做着就失控了。产品那边今天说换某家的新模型试试&…

2026/10/13 20:34:36 阅读更多 →
吃透OpenCV类型宏CV_8UC3:位深通道与内存布局

吃透OpenCV类型宏CV_8UC3:位深通道与内存布局

写这篇文章的起因,是最近又看到不少人在图像处理群里问“为什么Mat创建老报错”“为什么读进来的图片和我心里想的不一样”,最后发现根子都出在同一个地方:没搞懂OpenCV的类型宏,比如CV_8UC3到底代表什么。这玩意儿看着像一串乱码…

2026/10/13 20:34:36 阅读更多 →
YOLOV4后处理解析:从NMS到DIOU-NMS的原理与Python实现

YOLOV4后处理解析:从NMS到DIOU-NMS的原理与Python实现

YOLOV4学习系列写到第三篇,前面咱们拆过CSPDarknet53骨干结构,聊过SPP和PANet的Neck设计,今天终于轮到推理阶段的最后一道工序——非极大值抑制。NMS这个词很多同学早就不陌生了,检测模型调试、比赛刷分、论文复现都绕不开它。但你…

2026/10/13 20:34:36 阅读更多 →
Zbrush次世代角色头部雕刻全流程:从结构认知到皮肤纹理

Zbrush次世代角色头部雕刻全流程:从结构认知到皮肤纹理

做次世代游戏角色,头部雕刻永远是绕不开的坎。常有人说,身体可以靠布料和铠甲遮,脸却始终暴露在玩家眼前,Zbrush头部细节雕刻直接决定了角色能站上哪个档次。这些年我经手过不少项目,也从大量废案里踩出一些实用的新技…

2026/10/13 20:33:28 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →