MemorySharp 窗口操控技巧:模拟键盘鼠标输入与窗口消息发送的完整指南
发布时间:2026/8/18 17:58:08 作者:尧图编辑部 阅读量:1,286

MemorySharp 窗口操控技巧模拟键盘鼠标输入与窗口消息发送的完整指南【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharpMemorySharp 是一款基于 C# 的 Windows 内存编辑库除了读写远程进程的内存数据之外它还内置了一套强大的窗口操控能力无需激活目标窗口即可向其发送键盘输入、模拟鼠标点击与移动以及通过窗口消息PostMessage / SendMessage与目标程序深度交互。本文将为新手读者整理一份模拟键盘鼠标输入与窗口消息发送的实用指南帮助你快速上手 Windows 程序自动化操控。MemorySharp 窗口操控的三大核心能力在动手之前先了解 MemorySharp 中与窗口操控相关的三个核心对象对象作用源码位置RemoteWindow代表远程进程中的一个窗口提供标题、位置、尺寸、键盘、鼠标等属性RemoteWindow.csBaseKeyboard虚拟键盘负责按键与文本输入BaseKeyboard.csBaseMouse虚拟鼠标负责移动、点击与滚轮BaseMouse.cs所有窗口操控都从MemorySharp实例的Windows属性WindowFactory出发参考 WindowFactory.cs。第一步快速获取目标窗口的三种方法在模拟键盘鼠标输入之前先要拿到目标窗口的RemoteWindow对象获取主窗口sharp.Windows.MainWindow按标题查找sharp.Windows.GetWindowsByTitle(记事本)或模糊匹配GetWindowsByTitleContains(记事)按类名查找sharp.Windows.GetWindowsByClassName(Scintilla) 提示类名查找是自动化脚本中最常用的方式因为窗口标题可能会随内容变化而类名通常稳定不变。第二步无需激活窗口的模拟键盘输入技巧RemoteWindow.Keyboard默认使用MessageKeyboard实现它通过向窗口消息队列投递WM_KEYDOWN、WM_KEYUP与WM_CHAR消息来模拟按键即使窗口没有在前台也能正常工作实现细节见 MessageKeyboard.cs。常用的键盘输入 API 一览Press(Keys key)按下指定按键Release(Keys key)释放按键PressRelease(Keys key)快速敲击一次按键Press(Keys key, TimeSpan interval)按住按键并周期重复可用于方向键滚动Write(string text)向窗口逐字写入文本最实用的文本自动输入写法var sharp new MemorySharp(process); // 找到记事本风格的编辑区控件 var edit sharp.Windows.GetWindowsByClassName(Scintilla).FirstOrDefault(); if (edit ! null) { edit.Keyboard.Write(Hello, MemorySharp!); }按住方向键实现自动滚动var window sharp.Windows.MainWindow; window.Keyboard.Press(Keys.Down, TimeSpan.FromMilliseconds(20)); // 每 20ms 重复一次 Thread.Sleep(3000); window.Keyboard.Release(Keys.Down); // 释放按键停止滚动第三步模拟鼠标移动与点击的操作方法RemoteWindow.Mouse默认使用SendInputMouse基于 Windows 的SendInputAPI 在系统层面注入鼠标事件模拟效果最接近真实操作实现见 SendInputMouse.cs。鼠标操作 API 一览MoveTo(x, y)将光标移动到窗口内的相对坐标ClickLeft()/ClickRight()/ClickMiddle()单击左/右/中键DoubleClickLeft()双击左键PressLeft()/ReleaseLeft()单独按下或释放左键拖拽必备ScrollVertically(delta)/ScrollHorizontally(delta)垂直/水平滚动滚轮模拟点击窗口左上角的完整流程var window sharp.Windows.MainWindow; window.Activate(); // 先将窗口切换到前台 window.Mouse.MoveTo(0, 0); // 光标移动到窗口左上角 window.Mouse.ClickLeft(); // 执行左键单击⚠️ 注意与键盘的无需激活不同SendInput鼠标事件作用于系统全局操作前建议先Activate()目标窗口确保点击命中正确位置。第四步窗口消息发送进阶技巧PostMessage 与 SendMessage除了键盘鼠标RemoteWindow还直接暴露了 Win32 消息机制适合发送自定义或系统消息PostMessage将消息投递到窗口所属线程的消息队列后立即返回不等待处理结果适合发出即忘的场景SendMessage直接调用窗口过程处理消息等待处理完成后返回结果适合需要返回值或同步操作的场景两个方法的定义位于 RemoteWindow.cs底层由 WindowCore.cs 封装。用消息优雅地关闭窗口window.PostMessage(WindowsMessages.Close, UIntPtr.Zero, UIntPtr.Zero);关闭窗口的三种方式对比方式实现适用场景window.Close()内部发送WM_CLOSE最优雅程序可保存数据后退出PostMessage(Close...)异步投递关闭消息不关心处理结果window.State ...修改窗口显示状态最小化、最大化、恢复显示第五步窗口布局与状态的一站式操控在自动化的最后别忘了RemoteWindow自带的布局与状态属性它们与键盘鼠标配合可完成定位窗口 → 模拟输入 → 调整布局的完整闭环位置与尺寸X、Y、Width、Height显示状态State最小化 / 最大化 / 正常窗口激活Activate()、IsActivated标题读写Title任务栏闪烁提醒Flash()/Flash(count, timeout)var window sharp.Windows.MainWindow; window.X 200; window.Y 200; window.Width 800; window.Height 600; window.Flash(); // 闪烁任务栏图标提醒用户总结新手最容易踩的三个坑键盘与鼠标的激活要求不同MessageKeyboard无需激活窗口即可输入而SendInputMouse需要窗口在前台才能准确定位点击。句柄校验目标窗口可能随程序关闭而失效调用前应先判空例如用GetWindowsByTitleContains后检查FirstOrDefault()结果。消息参数要完整PostMessage与SendMessage需要正确传递wParam/lParam直接调用时务必参照 Win32 文档填写参数否则消息可能被窗口过程忽略。掌握了以上MemorySharp 窗口操控技巧你就能用纯 C# 代码实现定位窗口 → 模拟键盘输入 → 模拟鼠标操作 → 发送窗口消息的完整自动化链路。无论是编写游戏辅助工具、GUI 自动化测试脚本还是远程程序的交互式控制这套能力都足够支撑你的开发需求。如果你想深入源码研究推荐从 RemoteWindow.cs 与 BaseKeyboard.cs 开始阅读。【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考