Windows GUI自动化实战:基于OpenClaw-Win的Python桌面应用操控指南

news2026/5/1 3:10:55
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目叫pitthawat7/openclaw-win。乍一看这个标题你可能会有点懵——“OpenClaw”是啥“Win”又代表什么这其实是一个专门为Windows平台设计的开源自动化工具核心功能是模拟鼠标和键盘操作实现图形用户界面GUI的自动化。简单来说它就像一只“机械爪”能帮你自动点击、输入、拖拽完成那些重复、繁琐的电脑操作。我自己作为多年的软件开发和运维对这类工具的需求感同身受。无论是日常办公中需要批量处理Excel报表、自动填写网页表单还是软件测试中需要模拟用户操作进行回归测试甚至是游戏里想实现一些简单的自动化任务一个稳定、易用且开源的自动化工具都是效率神器。市面上的商业软件要么收费不菲要么功能臃肿而一些轻量级的脚本工具又往往对新手不够友好。openclaw-win的出现恰好填补了这个空白。它基于Python生态代码开源意味着你可以完全掌控它也能根据自己的需求进行二次开发。这个项目的核心价值在于“开源”和“Windows原生”。开源保证了透明度和可定制性你不用担心有后门或者功能限制。而“Windows原生”则意味着它深度适配Windows系统的消息机制和API在稳定性和兼容性上往往比那些跨平台方案在Windows上的表现要更胜一筹。接下来我就带你深入拆解这个项目从设计思路到实操细节再到避坑指南让你不仅能用好它更能理解它背后的原理。2. 项目整体设计与思路拆解2.1 核心架构与选型逻辑openclaw-win的核心设计思路非常清晰提供一个高层级的、易于使用的API封装底层复杂的Windows GUI自动化操作。它没有选择像Selenium那样专注于Web自动化也没有选择像PyAutoGUI那样追求极致的跨平台有时在Windows上会有些小毛病而是坚定地立足于Windows平台直接调用Windows API如user32.dll中的函数来实现最底层的控制。为什么这么选型这背后有几点考量性能与可靠性直接调用系统API减少了中间抽象层指令响应更及时对窗口焦点、控件识别的处理也更精准。特别是在处理一些老旧桌面应用或者全屏游戏时这种“直连”方式往往更可靠。功能深度Windows API提供了极其丰富的GUI操作接口从最简单的鼠标移动点击到复杂的获取窗口树结构、监听系统消息。基于此构建的工具其功能上限非常高可以应对各种复杂场景。依赖简洁项目主要依赖pywin32这个库它是Python调用Windows COM组件和API的事实标准成熟且稳定。避免了引入一堆复杂的第三方依赖让环境部署变得更简单。项目的代码结构通常也比较模块化。你可能会看到类似mouse.py、keyboard.py、window.py这样的模块分别负责鼠标模拟、键盘模拟和窗口查找/操作。这种分离符合“单一职责原则”使得代码易于阅读和维护也方便用户按需导入使用。2.2 与同类工具的对比分析为了更清楚它的定位我们把它和几个常见的自动化工具做个简单对比工具名称核心特点适用平台优点缺点openclaw-win的定位PyAutoGUI纯Python跨平台简单易用Win/macOS/Linux语法简单入门快功能全面跨平台导致某些平台特性支持不佳速度有时较慢图像识别依赖截图可能受缩放影响更专注Windows底层调用追求稳定和性能Selenium浏览器自动化标准跨平台通过浏览器驱动Web自动化事实标准生态强大仅用于Web无法操作桌面应用专注于桌面应用和操作系统级的GUI自动化AutoHotkey脚本语言Windows专属极其强大Windows功能无比强大社区资源海量热键功能独步天下需要学习一门新的脚本语言AHK对纯Python开发者有门槛为Python开发者提供类似AHK核心自动化能力无缝融入Python生态UIAutomationMicrosoft官方UI自动化框架Windows官方支持对现代应用WPF/UWP支持好API相对底层直接使用较复杂文档以.NET为主提供更Pythonic、更友好的封装降低使用难度从对比可以看出openclaw-win的目标用户很明确那些主要使用Python、工作环境是Windows、需要稳定可靠地自动化桌面应用包括但不限于Win32、WPF、甚至一些游戏的开发者、测试工程师和效率追求者。它不追求最全的功能而是在特定赛道上追求更好的体验。3. 核心功能模块解析与实操要点3.1 环境部署与基础配置使用openclaw-win的第一步是搭建环境。由于它是一个开源项目通常你需要从GitHubpitthawat7/openclaw-win克隆代码或通过pip安装如果作者已发布到PyPI。步骤一安装Python确保你的系统安装了Python 3.7或更高版本。建议使用官方安装包并勾选“Add Python to PATH”。步骤二安装依赖核心依赖就是pywin32。打开命令行CMD或PowerShell执行pip install pywin32如果项目有requirements.txt文件也可以使用pip install -r requirements.txt一键安装所有依赖。步骤三获取openclaw-win如果项目已发布到PyPIpip install openclaw-win如果尚未发布你需要克隆源码git clone https://github.com/pitthawat7/openclaw-win.git cd openclaw-win pip install -e . # 以可编辑模式安装方便修改代码注意在Windows上安装pywin32有时可能会遇到权限问题或与现有Python环境的冲突。如果安装失败可以尝试以管理员身份运行命令行或者先卸载旧版本pip uninstall pywin32再重新安装。另外确保你的Python环境是64位还是32位与你的系统匹配。3.2 鼠标控制模块深度解析鼠标控制是GUI自动化的基石。openclaw-win的鼠标模块通常会提供以下核心功能移动 (move_to): 将鼠标光标瞬间移动到屏幕的指定坐标x, y。坐标原点 (0,0) 通常在屏幕左上角。点击 (click): 在当前位置或指定坐标执行鼠标点击。可以指定左键、右键、中键以及单击、双击。拖拽 (drag_to): 模拟按下鼠标按钮、移动、然后松开的过程常用于文件移动或窗口调整。滚动 (scroll): 模拟鼠标滚轮滚动参数通常是滚动的“格数”正数向上负数向下。实操示例与避坑import openclaw_win as ocw import time # 移动到屏幕中心 (假设屏幕分辨率是1920x1080) ocw.mouse.move_to(960, 540) time.sleep(0.5) # 稍作停顿让系统反应 # 在当前位置左键单击 ocw.mouse.click(buttonleft) # 或者在指定坐标右键双击 ocw.mouse.click(x100, y200, buttonright, clicks2) # 拖拽操作从(100,100)拖到(200,200) ocw.mouse.down(x100, y100) # 按下左键 time.sleep(0.2) ocw.mouse.move_to(200, 200) # 移动 time.sleep(0.2) ocw.mouse.up() # 松开左键 # 通常库会提供 drag_to 函数封装这一过程 # ocw.mouse.drag_to(100, 100, 200, 200) # 滚动页面 ocw.mouse.scroll(clicks5) # 向上滚动5格重要心得绝对坐标 vs 相对坐标openclaw-win通常使用绝对屏幕坐标。这意味着你的脚本在不同分辨率或缩放设置的电脑上可能无法正常工作。一个最佳实践是永远不要硬编码坐标。应该先通过窗口查找功能下一节会讲获取目标窗口或控件的位置再基于此位置进行相对偏移计算。操作间等待 (time.sleep)自动化脚本运行速度很快但GUI应用程序响应需要时间。在两个连续操作之间尤其是点击后打开新窗口、移动后悬停弹出菜单务必添加适当的等待time.sleep。更好的做法是使用“条件等待”比如等待某个窗口出现或某个像素颜色变化但这需要更高级的功能或自己实现。管理员权限某些应用程序尤其是系统级应用或游戏运行在管理员权限下。如果你的Python脚本没有以管理员身份运行向这些程序发送的鼠标键盘事件可能会被系统拦截UAC虚拟化。解决方法是以管理员身份运行你的Python脚本或IDE。3.3 键盘控制模块深度解析键盘模块用于模拟按键输入从单个字符到组合键。输入字符串 (type): 模拟逐字输入一段文本。按键操作 (press,key_down,key_up): 模拟按下、松开某个或某组按键。press是按下并松开的组合。热键 (hotkey): 模拟如CtrlC、AltTab这样的组合键操作。实操示例与字符映射import openclaw_win as ocw import time # 在活动窗口输入一段文字假设光标已在输入框 ocw.keyboard.type(Hello, OpenClaw! This is an automation test.\n) # \n 代表回车 time.sleep(1) # 模拟复制操作 (CtrlC) ocw.keyboard.hotkey(ctrl, c) # 模拟 AltF4 关闭当前窗口 ocw.keyboard.hotkey(alt, f4) # 更底层的控制按下Shift输入大写A松开Shift ocw.keyboard.key_down(shift) ocw.keyboard.press(a) # 此时输入的是 A ocw.keyboard.key_up(shift)注意事项键名规范库中定义的键名需要查看其文档或源码。常见的有a,1,enter,tab,ctrl,alt,shift,win,f1等。大小写通常不敏感但最好保持一致。输入法干扰这是GUI自动化最大的坑之一如果你的系统输入法是中文状态type(hello)打出来的可能是“你好哦”。务必在脚本开始前将输入法切换为英文状态。可以在脚本里发送WinSpace切换输入法但这并不完全可靠。最稳妥的方法是在运行自动化脚本的整个过程中手动保持英文输入法。特殊字符与速度type函数输入大量文本时速度可能过快导致应用程序丢失字符。可以尝试在字符间增加微小延迟或者使用press循环每个字符并控制间隔。3.4 窗口与控件查找模块解析这是openclaw-win的进阶能力也是其价值所在。仅仅知道坐标是不够的我们需要智能地找到目标窗口和里面的按钮、输入框。查找窗口 (find_window): 通过窗口标题、类名等属性找到顶层窗口。获取窗口信息: 获取窗口的位置、大小、状态最小化/最大化、句柄HWND。控件遍历与查找: 遍历窗口内的子控件按钮、编辑框等通过控件类型、名称、ID等属性进行定位。实操示例自动化记事本import openclaw_win as ocw import time # 1. 启动记事本 # 这里假设 openclaw-win 提供了启动程序的功能如果没有可以用 subprocess 模块 import subprocess subprocess.Popen(notepad.exe) time.sleep(2) # 等待记事本启动 # 2. 查找记事本窗口 # 通常通过窗口标题查找记事本标题初始是“无标题 - 记事本” notepad_windows ocw.window.find_windows(title无标题 - 记事本) if not notepad_windows: # 也可能标题就是“记事本” notepad_windows ocw.window.find_windows(title记事本) if notepad_windows: notepad_hwnd notepad_windows[0] # 取第一个找到的窗口句柄 # 3. 激活/前置窗口 ocw.window.set_foreground(notepad_hwnd) time.sleep(0.5) # 4. 向记事本输入内容 ocw.keyboard.type(Automated text from OpenClaw!\n) time.sleep(1) # 5. 模拟打开“文件”菜单 (AltF) ocw.keyboard.hotkey(alt, f) time.sleep(0.5) # 模拟按下“X”键选择“退出” ocw.keyboard.press(x) time.sleep(0.5) # 在退出保存对话框出现前可能还有延迟这里再等一下 time.sleep(1) # 通常不保存按“N”或“不保存” ocw.keyboard.press(n) else: print(未找到记事本窗口)深度解析与技巧窗口句柄HWND的不稳定性窗口标题和类名可能会变比如记事本打开文件后标题就变了。更可靠的方式是结合多个属性查找或者使用FindWindowEx遍历所有窗口进行更复杂的匹配。一些库会提供通过进程IDPID查找窗口的方法这通常最稳定。控件识别工具是必备的光靠猜控件属性不行。你需要借助外部工具来“窥探”窗口内部。强烈推荐使用微软官方工具Inspect.exe(Windows SDK的一部分) 或Spy(Visual Studio自带)。它们可以显示光标所指控件的所有属性如类名、控件ID、名称等是你编写查找逻辑的“眼睛”。模态对话框与多线程操作可能会触发模态对话框阻塞主窗口你的脚本需要能检测并处理这些新窗口。这通常涉及更复杂的事件循环或消息监听openclaw-win的基础功能可能不够需要你结合其他库如pywinauto或自行扩展。4. 实战构建一个完整的自动化任务让我们设计一个稍微复杂点的实战任务自动登录一个桌面客户端软件并导出当日数据报告。假设这个软件是一个传统的Win32桌面应用。4.1 任务分析与设计目标软件启动后自动输入用户名密码登录导航到“报表”模块选择“当日数据”点击“导出”按钮将报告保存到指定位置。挑战软件启动速度不确定。登录后主界面加载需要时间。控件可能需要通过复杂的层级关系查找。保存文件对话框是系统通用控件需要处理。设计思路使用subprocess启动软件。使用循环等待的方式检测登录窗口、主窗口是否出现。使用Inspect.exe获取用户名框、密码框、登录按钮的控件信息。登录后同样方式查找报表菜单、导出按钮。处理保存对话框时直接使用键盘快捷键AltS保存然后输入路径Enter确认可能比查找控件更可靠。4.2 分步实现与代码详解import openclaw_win as ocw import subprocess import time import os def wait_for_window(title_part, timeout30): 等待包含特定标题文字的窗口出现 start_time time.time() while time.time() - start_time timeout: windows ocw.window.find_windows() for hwnd in windows: # 假设库有 get_window_title 函数 win_title ocw.window.get_title(hwnd) if win_title and title_part in win_title: ocw.window.set_foreground(hwnd) time.sleep(1) # 前置后稍等 return hwnd time.sleep(0.5) # 每0.5秒检查一次 raise TimeoutError(f在{timeout}秒内未找到标题包含{title_part}的窗口) def main(): app_path rC:\Program Files\MyApp\MyApp.exe username your_username password your_password export_path rD:\Reports\today_report.xlsx # 步骤1启动应用 print(正在启动应用...) subprocess.Popen(app_path) # 步骤2等待并聚焦登录窗口 print(等待登录窗口...) login_hwnd wait_for_window(登录 - MyApp, timeout20) # 步骤3输入凭据并登录 # 假设通过Inspect.exe已知用户名框是Edit控件名称是“用户名:” # 这里演示一种查找思路实际库的API可能不同 # 例如user_edit ocw.window.find_control(login_hwnd, class_nameEdit, name用户名:) # 然后 ocw.window.set_focus(user_edit); ocw.keyboard.type(username) # 由于不同库控件查找API差异大这里用“坐标偏移”的土办法示例不推荐用于生产 # 获取登录窗口位置 left, top, right, bottom ocw.window.get_rect(login_hwnd) # 假设我们知道用户名输入框在窗口内相对位置 (50, 80) user_x left 50 user_y top 80 ocw.mouse.click(user_x, user_y) ocw.keyboard.type(username) time.sleep(0.5) # Tab键切换到密码框 ocw.keyboard.press(tab) ocw.keyboard.type(password) time.sleep(0.5) # 假设登录按钮在 (200, 150) login_btn_x left 200 login_btn_y top 150 ocw.mouse.click(login_btn_x, login_btn_y) print(登录信息已提交等待主界面...) # 步骤4等待主界面 main_hwnd wait_for_window(MyApp 主界面, timeout30) # 步骤5导航到报表模块 (假设通过菜单快捷键 AltR) time.sleep(2) # 等待主界面完全加载 ocw.keyboard.hotkey(alt, r) time.sleep(1) # 步骤6点击“当日数据”和“导出” (假设是工具栏按钮有固定坐标或可通过控件查找) # 这里再次演示不稳定的坐标法实际应用务必用控件查找 # 获取主窗口坐标 m_left, m_top, m_right, m_bottom ocw.window.get_rect(main_hwnd) # 点击“当日数据”按钮 ocw.mouse.click(m_left 300, m_top 100) time.sleep(2) # 等待数据加载 # 点击“导出”按钮 ocw.mouse.click(m_left 400, m_top 100) # 步骤7处理保存文件对话框 time.sleep(2) # 等待保存对话框弹出 # 直接使用键盘快捷键操作保存对话框 # AltS 焦点跳到“保存”输入框这是Windows通用对话框的常见快捷键 ocw.keyboard.hotkey(alt, s) time.sleep(0.5) # 清空原有路径并输入新路径 ocw.keyboard.hotkey(ctrl, a) # 全选 ocw.keyboard.press(delete) # 删除 ocw.keyboard.type(export_path) time.sleep(0.5) ocw.keyboard.press(enter) # 确认保存 # 步骤8等待导出完成可能有个进度条窗口 time.sleep(10) # 简单等待更好的做法是检测进度条窗口消失 print(f报告已导出到: {export_path}) # 步骤9关闭应用 (AltF4) ocw.window.set_foreground(main_hwnd) time.sleep(1) ocw.keyboard.hotkey(alt, f4) if __name__ __main__: main()4.3 实战总结与优化方向上面的脚本是一个高度简化的示例实际应用中会遇到更多问题。但它展示了使用openclaw-win这类工具构建自动化任务的基本流程启动 - 等待/查找 - 操作 - 等待/查找 - 操作 - ... - 结束。优化方向彻底抛弃坐标拥抱控件查找坐标法在分辨率、窗口位置、主题变化时极其脆弱。必须花时间用Inspect.exe分析控件属性实现基于控件ID、类名、名称的查找。如果openclaw-win的控件查找功能较弱可以考虑将其与pywinauto结合使用后者在控件识别方面非常强大。实现健壮的等待机制用死循环time.sleep等待窗口是最低效的。应该实现轮询检查并设置超时。更高级的是使用事件驱动但这需要更深的Windows编程知识。增加错误处理与日志脚本可能因为各种原因窗口没弹出、控件没找到、意外弹窗而失败。必须用try...except包裹关键操作并记录详细的日志方便排查。封装通用操作将“查找并点击按钮”、“向输入框输入文字”等操作封装成函数可以大幅提高代码复用性和可读性。考虑使用图像识别作为后备对于某些控件属性无法获取的“顽固”应用比如一些游戏或自定义绘制的界面可以结合图像识别如opencv模板匹配作为定位的补充手段。openclaw-win本身可能不包含此功能但你可以自己集成。5. 常见问题排查与进阶技巧5.1 典型问题速查表问题现象可能原因排查步骤与解决方案脚本运行时鼠标/键盘无反应1. 脚本没有以管理员身份运行。2. 目标应用运行在更高权限或不同的桌面会话如远程桌面。3. 杀毒软件或安全软件拦截。1.右键点击你的Python脚本或IDE选择“以管理员身份运行”。这是最常见的原因。2. 确保脚本和目标应用在同一个用户会话下运行。远程桌面场景较复杂。3. 临时禁用杀毒软件测试或将你的Python解释器加入白名单。点击位置偏移或错位1. 系统显示缩放比例不是100%。2. 使用了错误的屏幕坐标多显示器。3. 脚本中的坐标是硬编码的。1. 将Windows显示缩放设置为100%。或者在代码中获取缩放因子并进行换算通过ctypes.windll.shcore.GetScaleFactorForMonitor。2. 确认你获取和使用的坐标是基于哪个显示器。openclaw-win的函数应能处理多显示器。3.永远使用基于窗口或控件的相对坐标而非绝对屏幕坐标。键盘输入乱码或无效1. 输入法未切换为英文。2. 目标窗口没有焦点。3. 按键速度太快应用来不及处理。1.在运行脚本前手动将系统默认输入法切换为“美式键盘”英文状态。这是最根本的解决办法。2. 在输入前确认已使用set_foreground或set_focus将焦点设到目标控件。3. 在type的每个字符间增加微小延迟例如ocw.keyboard.type(text, interval0.05)。找不到窗口或控件1. 窗口标题/类名不匹配。2. 窗口尚未创建或已隐藏。3. 控件是动态生成的没有固定属性。1. 使用Inspect.exe重新确认窗口/控件的准确属性标题、类名、控件ID。注意标题可能包含变量部分。2. 增加等待时间或实现更智能的等待循环。3. 尝试通过父窗口层级关系查找或者使用更模糊的匹配条件如部分标题。对于动态控件可能需要根据其在控件树中的索引第几个子控件来定位。脚本在虚拟机中运行异常虚拟机与宿主机之间鼠标键盘事件的传递可能存在差异或延迟。1. 尝试在虚拟机设置中将鼠标集成模式从“绝对”改为“相对”或反之。2. 显著增加操作之间的延迟time.sleep。3. 如果可能直接在物理机上测试。5.2 进阶技巧与性能优化降低CPU占用在等待循环中使用time.sleep(0.1)而不是忙等待while True:可以显著降低脚本的CPU占用率。使用“信号量”而非固定等待不要总是用固定的time.sleep(5)。可以写一个函数每隔0.1秒检查一次条件如图片出现、窗口标题变化条件满足立即继续最多等待N秒超时。这比固定等待更高效。脚本可配置化将窗口标题、控件属性、坐标偏移、等待时间等易变参数提取到配置文件如JSON、YAML或命令行参数中。这样无需修改代码就能适配不同的环境或应用版本。引入图像识别作为降级方案对于实在无法通过控件属性定位的元素可以保存其截图作为模板使用OpenCV进行模板匹配来定位。虽然比控件查找慢但作为保底手段非常有用。你可以封装一个find_by_image函数。录制与回放对于复杂的操作流程可以考虑开发简单的录制功能记录下鼠标事件坐标、动作和键盘事件按键、间隔然后将其序列化为脚本。openclaw-win本身可能没有但你可以利用它的监听功能如果提供或结合pynput库来实现录制端回放端则直接用openclaw-win。5.3 安全与伦理考量最后必须强调自动化工具是一把双刃剑。仅用于合法合规的用途自动化你的本职工作、测试你自己的软件、处理个人重复任务是完全正当的。但请勿将其用于破解软件、刷票、游戏外挂、攻击他人系统或其他任何违反服务条款或法律的行为。尊重他人劳动在考虑自动化某个公共网站或服务时请先阅读其robots.txt和服务条款确保你的行为是允许的。过快的请求频率可能会对服务器造成压力被视为攻击。注意系统安全你的自动化脚本里可能包含密码等敏感信息。不要将包含硬编码密码的脚本上传到公开的代码仓库。考虑使用环境变量或加密的配置文件来管理凭证。pitthawat7/openclaw-win作为一个开源项目为我们提供了一个在Windows上进行GUI自动化的有力起点。它的价值在于其Windows原生特性和Pythonic的简洁接口。虽然它在开箱即用的功能和易用性上可能不如一些更成熟的框架但正因为其开源和相对简洁给了我们巨大的定制和深入学习空间。理解其底层基于Windows API的原理能让你在遇到问题时更有排查方向也能让你根据实际需求将其改造成更贴合自己工作流的利器。自动化不是为了替代思考而是将我们从重复劳动中解放出来去处理更有价值的问题。希望这篇详尽的拆解能帮助你用好这只“开源之爪”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2570757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…