# 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:
## 打赏墙
如果这个项目对您有帮助,欢迎打赏支持!
| 微信打赏 | 支付宝打赏 |
|---------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
|