# Wlkr.WinAutoma **Repository Path**: dimwalker/Wlkr.WinAutoma ## Basic Information - **Project Name**: Wlkr.WinAutoma - **Description**: Wlkr.WinAutoma是一个基于Windows系统的自动化工具,参考了PyAutoGUI的功能设计,使用Win32 API实现了鼠标和键盘的自动化操作。该项目旨在提供轻量级、高性能的Windows系统自动化解决方案。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: https://dimtechstudio.com/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-12 - **Last Updated**: 2025-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Wlkr.WinAutoma - Windows系统自动化程序 Wlkr.WinAutoma是一个基于Windows系统的自动化工具,参考了PyAutoGUI的功能设计,使用Win32 API实现了鼠标和键盘的自动化操作。该项目旨在提供轻量级、高性能的Windows系统自动化解决方案。 ## 项目结构 ``` Wlkr.WinAutoma/ ├── main.py # 主入口文件 ├── control/ │ └── win32api/ │ ├── keyboard_controller.py # 键盘控制模块 │ └── mouse_controller.py # 鼠标控制模块 ├── test_func/ │ ├── keyboard_test.py # 键盘功能测试 │ └── mouse_test.py # 鼠标功能测试 └── requirements.txt # 依赖列表 ``` ## 已实现功能 ### 鼠标控制功能 #### 1. 鼠标移动 - `move_to(x, y, duration=None)`: 移动鼠标到绝对坐标 - `move_relative(dx, dy, duration=None)`: 相对当前位置移动鼠标 - `_smooth_move(target_x, target_y, duration=None, steps=20)`: 平滑移动鼠标(内部使用) #### 2. 鼠标点击 - `click(button='left', clicks=1, interval=0.1, x=None, y=None, duration=None)`: 点击操作 - `double_click(button='left', x=None, y=None, duration=None)`: 双击操作 - `mouse_down(button='left', x=None, y=None, duration=None)`: 按下鼠标按钮 - `mouse_up(button='left')`: 释放鼠标按钮 #### 3. 拖拽功能 - `drag_to(start_x, start_y, end_x, end_y, duration=None, button='left')`: 拖拽操作 #### 4. 滚轮功能 - `scroll(clicks, direction='vertical')`: 滚动滚轮 #### 5. 状态查询 - `get_position()`: 获取鼠标当前位置 - `is_pressed(button='left')`: 检查鼠标按钮是否被按下 - `is_in_area(x1, y1, x2, y2)`: 检查鼠标是否在指定矩形区域内 #### 6. 实用功能 - `move_to_center(duration=None)`: 移动到屏幕中心 - `move_to_random(x_range, y_range, duration=0)`: 移动到随机位置 - `shake(intensity=5, duration=0.5)`: 鼠标抖动(用于模拟真人操作) ### 键盘控制功能 #### 1. 基础按键功能 - `press(key, delay=None)`: 按下按键(不释放) - `release(key)`: 释放按键 - `tap(key, presses=1, interval=None)`: 点击按键(按下并释放) - `write(text, interval=None)`: 输入文本(支持中英文) - `hotkey(*keys, delay=0.1)`: 按下组合键(如 Ctrl+C) #### 2. 特殊功能 - `key_down(key)`: 按下按键(别名,同press) - `key_up(key)`: 释放按键(别名,同release) - `is_pressed(key)`: 检查按键是否被按下 - `is_toggled(key)`: 检查切换键的状态(如CapsLock, NumLock) - `hold_and_release(key, hold_time=1.0)`: 按住按键一段时间后释放 #### 3. 高级功能 - `typewrite(keys, interval=None)`: 按顺序输入一系列按键(兼容pyautogui) - `send_keys(keys)`: 发送按键(兼容Selenium的send_keys方式) - `simulate_typing(text, min_delay=0.05, max_delay=0.15)`: 模拟真人打字(随机延迟) #### 4. 键盘监听功能 - `start_listening(callback=None)`: 开始监听键盘事件 - `stop_listening()`: 停止监听键盘 - `get_key_events(timeout=None)`: 获取键盘事件队列 ## 使用示例 ### 鼠标控制示例 ```python from control.win32api.mouse_controller import MouseController # 初始化鼠标控制器 mouse = MouseController() # 移动鼠标到指定位置 mouse.move_to(100, 100, duration=1) # 1秒内平滑移动到(100, 100) # 点击操作 mouse.click() # 左键单击 mouse.click(button='right', x=200, y=200) # 右键点击(200, 200) mouse.double_click() # 左键双击 # 拖拽操作 mouse.drag_to(100, 100, 500, 500, duration=1) # 1秒内从(100, 100)拖拽到(500, 500) # 滚轮滚动 mouse.scroll(10) # 向上滚动10个单位 mouse.scroll(-5, direction='horizontal') # 向左滚动5个单位 # 获取鼠标位置 x, y = mouse.get_position() print(f"当前鼠标位置: ({x}, {y})") # 模拟真人操作 mouse.shake(intensity=10, duration=0.5) # 鼠标抖动 ``` ### 键盘控制示例 ```python from control.win32api.keyboard_controller import KeyboardController # 初始化键盘控制器 kb = KeyboardController() # 基本按键操作 kb.tap('a') # 点击A键 kb.hotkey('ctrl', 'c') # 组合键Ctrl+C # 文本输入 kb.write("Hello World!") # 输入文本 kb.simulate_typing("这是模拟真人打字", min_delay=0.05, max_delay=0.15) # 模拟真人打字 # 按键状态检查 if kb.is_pressed('shift'): print("Shift键被按下了") if kb.is_toggled('capslock'): print("CapsLock已开启") # 游戏自动化示例 kb.press('w') # 按下W键(前进) time.sleep(2) # 前进2秒 kb.release('w') # 释放W键 kb.tap('space') # 跳跃 kb.hold_and_release('f', hold_time=0.5) # 按住F键0.5秒 ``` ### 组合操作示例 ```python from control.win32api.mouse_controller import MouseController from control.win32api.keyboard_controller import KeyboardController import time # 初始化控制器 mouse = MouseController() kb = KeyboardController() # 打开记事本 time.sleep(1) kb.hotkey('win', 'r') # 打开运行对话框 kb.write('notepad') # 输入记事本命令 kb.tap('enter') # 按回车键 # 等待记事本打开 time.sleep(1) # 输入文本 kb.write('这是使用Wlkr.WinAutoma自动化输入的文本!') # 保存文件 kb.hotkey('ctrl', 's') time.sleep(0.5) kb.write('test.txt') kb.tap('enter') # 关闭记事本 kb.hotkey('alt', 'f4') ``` ## 技术文档 ### 依赖项 项目依赖于以下Python库: - `pywin32`: 提供Windows API的访问 - `ctypes`: 提供C语言兼容的数据类型和函数调用 - `logging`: 日志记录 - `time`: 时间控制 - `math`: 数学计算 - `threading`: 线程控制 - `queue`: 队列操作 - `typing`: 类型提示 可以通过以下命令安装依赖: ```bash pip install -r requirements.txt ``` ### 实现原理 该项目使用Windows API实现自动化操作,主要依赖于以下API: #### 鼠标操作 - `SetCursorPos`: 设置鼠标位置 - `GetCursorPos`: 获取鼠标位置 - `mouse_event`: 模拟鼠标事件(点击、滚轮等) - `GetAsyncKeyState`: 获取按键状态 #### 键盘操作 - `keybd_event`: 模拟键盘事件(按下、释放等) - `GetAsyncKeyState`: 获取按键状态 - `GetKeyState`: 获取按键状态 - `SetWindowsHookExA`: 设置键盘钩子(用于监听键盘事件) ### 性能优化 - 使用原生Windows API,提高操作速度 - 实现平滑移动算法,避免鼠标移动过于机械 - 添加随机延迟,模拟真人操作 - 使用线程处理键盘监听,避免阻塞主线程 ## 未来规划 1. **屏幕截图和图像识别** - 实现屏幕截图功能 - 添加图像识别能力,支持基于图像的自动化 2. **窗口控制** - 实现窗口的打开、关闭、最小化、最大化等操作 - 支持窗口大小调整和位置移动 3. **文件操作自动化** - 实现文件和文件夹的创建、删除、复制、移动等操作 - 支持文件内容的读取和写入 4. **GUI界面** - 开发图形用户界面,方便用户配置和运行自动化脚本 - 支持录制和回放功能 5. **更多的事件监听** - 添加鼠标事件监听 - 支持更多的系统事件监听 6. **跨平台支持** - 考虑添加对macOS和Linux系统的支持 7. **文档和示例** - 完善文档,添加更多的使用示例 - 提供API参考文档 ## 注意事项 1. **权限问题**:某些操作可能需要管理员权限才能正常运行 2. **防病毒软件**:自动化操作可能会被防病毒软件误报为恶意行为,请在使用前关闭或配置防病毒软件 3. **安全风险**:自动化脚本可能会执行危险操作,请谨慎编写和运行 4. **兼容性**:该项目仅支持Windows系统,使用Win32 API实现 ## 联系方式 如有任何问题或建议,请通过以下方式联系: - Email: dimwalker@qq.com - Gitee: [dimwalker/Wlkr.WinAutoma](https://gitee.com/dimwalker/Wlkr.WinAutoma) - Github: ## 打赏墙 如果这个项目对您有帮助,欢迎打赏支持! | 微信打赏 | 支付宝打赏 | |---------------------------------------------------------------------|----------------------------------------------------------------------| | 微信打赏 | 支付宝打赏 |