### 系统功能
sniffMK是一个用于监听和记录鼠标和键盘事件的系统。通过使用macOS的Carbon和Core Graphics框架,该系统能够捕获用户的鼠标点击、拖动以及键盘按键事件,并将这些事件的相关信息输出到控制台。
### 系统架构
1. **事件捕获层**:通过`CGEventTapCreate`函数创建一个事件监听器(Event Tap),用于捕获指定类型的事件(如鼠标点击、键盘按键等)。
2. **事件处理层**:在`eventCallback`回调函数中处理捕获到的事件,提取事件的详细信息(如按键码、鼠标位置等),并将其格式化输出。
3. **事件过滤层**:通过`eventMask`变量设置要监听的事件类型,用户可以选择只监听鼠标事件、键盘事件或两者都监听。
4. **运行循环层**:通过`CFRunLoop`将事件监听器加入到当前运行循环中,确保事件监听器能够持续运行并捕获事件。
### 核心技术点
1. **事件监听**:使用`CGEventTapCreate`函数创建事件监听器,并通过`CGEventTapEnable`启用监听。
2. **事件处理**:在`eventCallback`回调函数中处理事件,提取事件的详细信息并输出。
3. **键盘事件处理**:通过`keyCodeToString`函数将按键码转换为可读的字符串,并通过`extractKeyModifiers`函数提取按键修饰符(如Shift、Control等)。
4. **鼠标事件处理**:通过`CGEventGetLocation`函数获取鼠标事件发生的位置坐标。
### 核心代码片段
// 创建事件监听器
eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, eventMask, eventCallback, NULL);
// 启用事件监听
CGEventTapEnable(eventTap, true);
// 将事件监听器加入运行循环
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
// 事件回调函数
CGEventRef eventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
// 处理事件并输出信息
switch(type)
{
case kCGEventLeftMouseDown:
printf("left mouse down\n");
break;
case kCGEventKeyDown:
printf("key down\n");
break;
// 其他事件处理...
}
return event;
}
### 应用场景
1. **用户行为分析**:可以用于记录用户的操作行为,分析用户的使用习惯。
2. **安全监控**:可以用于监控系统中的键盘和鼠标事件,检测异常操作。
3. **自动化测试**:可以用于自动化测试工具中,模拟用户的鼠标和键盘操作。
4. **辅助功能**:可以用于开发辅助功能工具,帮助残障人士使用计算机。
github链接地址:https://github.com/objective-see/sniffMK.git