You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LocalSystem账户运行的Windows服务中实现键鼠操作?

在LocalSystem Windows服务中实现键鼠模拟(用于远程登录场景)

LocalSystem账户运行的服务默认处于会话0,而用户远程登录(如RDP)会创建独立的交互会话,这是键鼠模拟的核心障碍。以下是具体实现方案:

1. 突破会话隔离,获取目标用户会话权限

要操作用户会话的桌面,必须先关联到目标会话:

  • 调用WTSEnumerateSessions枚举系统所有会话,筛选出活跃的用户会话(通过WTS_CONNECTSTATE_CLASS判断会话状态)
  • 用WTSQueryUserToken获取该会话对应的用户令牌
  • 通过DuplicateTokenEx复制令牌并设置TOKEN_ALL_ACCESS权限
  • 调用SetThreadToken将当前服务线程与目标用户令牌绑定
  • 最后用OpenInputDesktop打开目标会话的输入桌面,确保后续键鼠操作能定向到正确环境

2. 用Win32 API模拟键鼠输入

拿到桌面权限后,使用User32.dll的API实现输入:

键盘输入(推荐SendInput,替代老旧的keybd_event)

#include <windows.h>

void SimulateKeyPress(WORD keyCode) {
    INPUT input[2] = {0};
    
    // 按下按键
    input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = keyCode;
    
    // 释放按键
    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = keyCode;
    input[1].ki.dwFlags = KEYEVENTF_KEYUP;
    
    SendInput(2, input, sizeof(INPUT));
}

// 示例:输入用户名"admin"
SimulateKeyPress('A');
SimulateKeyPress('D');
SimulateKeyPress('M');
SimulateKeyPress('I');
SimulateKeyPress('N');

鼠标操作

void SimulateMouseClick(int x, int y) {
    INPUT input[2] = {0};
    
    // 移动鼠标到目标坐标(绝对坐标,需转换为0-65535范围)
    input[0].type = INPUT_MOUSE;
    input[0].mi.dx = (LONG)((x * 65535.0f) / GetSystemMetrics(SM_CXSCREEN));
    input[0].mi.dy = (LONG)((y * 65535.0f) / GetSystemMetrics(SM_CYSCREEN));
    input[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
    
    // 左键按下+释放
    input[1].type = INPUT_MOUSE;
    input[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
    
    SendInput(2, input, sizeof(INPUT));
}

3. 适配远程登录场景的特殊处理

  • 会话动态切换:用户断开重连后会话ID会变化,需监听WTS_SESSION_LOGON事件(通过WTSRegisterSessionNotification),实时更新目标会话
  • 登录窗口定位:直接给登录窗口发送消息比模拟键鼠更可靠,用FindWindowEx定位登录界面的用户名/密码输入框,再调用SendMessage发送WM_SETTEXT填充内容
  • 避免过早输入:等待会话完全加载后再执行操作,可通过WTSWaitSystemEvent等待WTS_SESSION_ACTIVE事件

关键注意事项

  • Windows Vista及以后,服务属性的“允许与桌面交互”选项仅对会话0有效,必须用会话关联的方式跨会话操作
  • 确保服务线程在操作完成后调用CloseHandle释放令牌和桌面句柄,避免资源泄漏
  • LocalSystem权限极高,实现时需严格校验目标会话的合法性,防止恶意利用

内容的提问来源于stack exchange,提问作者Bayirgulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:10:44