# restart_tdx **Repository Path**: lsy_admin/restart_tdx ## Basic Information - **Project Name**: restart_tdx - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-14 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 应用程序自动化启动器 这个C++程序可以按顺序打开三个指定的exe应用程序,并在每个应用中发送回车键。程序在启动应用程序之前会先关闭指定名称的进程。 ## 功能说明 程序执行流程: 1. **关闭指定名称的进程**(默认为"tdxw.exe") 2. 打开应用程序1 3. 延迟5秒 4. 向应用程序1发送回车键 5. 延迟5秒 6. 打开应用程序2 7. 延迟5秒 8. 向应用程序2发送回车键 9. 延迟5秒 10. 打开应用程序3 11. 向应用程序3发送回车键 ## 新增功能:关闭进程 程序现在会在启动应用程序之前自动关闭指定名称的所有进程。这个功能可以确保: - 避免重复启动相同的应用程序 - 清理之前可能残留的进程 - 确保应用程序以干净的状态启动 ### 关闭进程的工作原理 程序使用Windows API的Tool Help库来: 1. 创建系统进程快照 2. 遍历所有运行中的进程 3. 匹配指定名称的进程(不区分大小写) 4. 终止找到的所有匹配进程 5. 显示每个被终止进程的PID ## 新增功能:无需窗口激活的按键发送 程序现在支持向指定进程发送回车键,而不需要窗口处于活动状态。这个功能的优势: - **后台操作**:不需要切换窗口焦点 - **更可靠**:避免其他程序干扰按键发送 - **更精确**:直接向目标窗口发送消息 ### 按键发送的工作原理 程序使用以下技术实现无需激活的按键发送: 1. 枚举系统中所有窗口 2. 获取每个窗口所属的进程信息 3. 匹配指定进程名的窗口 4. 使用`SendMessage`直接向目标窗口发送键盘消息 5. 发送`WM_KEYDOWN`和`WM_KEYUP`消息模拟完整的按键过程 ## 使用方法 ### 1. 配置应用程序路径 在 `restart_tdx.cpp` 文件中,修改以下三行代码为您实际的应用程序路径: ```cpp std::string app1Path = "C:\\path\\to\\application1.exe"; std::string app2Path = "C:\\path\\to\\application2.exe"; std::string app3Path = "C:\\path\\to\\application3.exe"; ``` ### 2. 配置按键发送目标 默认情况下,程序向名为"tdxw.exe"的进程窗口发送回车键。如果需要修改目标进程: ```cpp // 在main函数中修改这些调用 sendEnterKeyToProcess("tdxw.exe"); // 改为你的目标进程名 ``` ### 3. 配置要关闭的进程名称(可选) 默认情况下,程序会关闭名为"tdxw.exe"的进程。如果您需要关闭其他进程,请修改main函数中的这行代码: ```cpp killProcessByName("tdxw.exe"); // 修改为您要关闭的进程名称 ``` **示例:** ```cpp // 关闭多个不同的进程 killProcessByName("notepad.exe"); killProcessByName("calc.exe"); ``` ### 4. 编译和运行程序 使用Visual Studio或者MSBuild编译项目: ```bash msbuild restart_tdx.sln /p:Configuration=Debug /p:Platform=x64 ``` 编译完成后,运行生成的exe文件: ```bash x64\Debug\restart_tdx.exe ``` ## 注意事项 1. **路径格式**:请使用双反斜杠 `\\` 或者正斜杠 `/` 作为路径分隔符 2. **权限**:确保程序有足够权限访问指定的应用程序和终止进程 3. **进程名称**:进程名称不需要包含路径,只需要文件名(如"tdxw.exe") 4. **键盘输入**:程序会向当前活动窗口发送回车键,请确保在发送按键时目标应用程序是活动窗口 5. **延迟时间**:每个延迟为5秒(5000毫秒),您可以在代码中修改 `delay(5000)` 的参数来调整延迟时间 ## 技术实现 ### 主要Windows API 程序使用了以下Windows API: - **CreateProcess()**: 启动外部应用程序 - **Sleep()**: 添加延迟,确保应用程序完全启动 - **keybd_event()**: 模拟键盘按键(备用方法) - **SendMessage()**: 直接向窗口发送消息 - **CreateToolhelp32Snapshot()**: 创建进程快照 - **Process32First/Process32Next()**: 遍历进程列表 - **TerminateProcess()**: 终止指定进程 - **EnumWindows()**: 枚举所有顶级窗口 - **GetWindowThreadProcessId()**: 获取窗口所属进程ID - **GetModuleFileNameEx()**: 获取进程的可执行文件路径 ## 故障排除 ### 按键发送失败 如果程序无法向目标窗口发送回车键: 1. **检查进程名**:确保目标进程名正确(包括.exe扩展名) 2. **检查窗口状态**:确保目标进程有可见的窗口 3. **权限问题**:某些受保护的窗口可能无法接收消息 4. **进程架构**:32位程序可能无法向64位进程发送消息 ### 关闭进程失败 如果程序无法关闭目标进程: 1. **权限不足**:某些系统进程需要管理员权限 2. **进程名错误**:确保进程名完全匹配(包括大小写) 3. **进程保护**:某些杀毒软件保护的进程无法被终止 ### 如果程序无法打开某个应用程序: 1. 检查文件路径是否正确 2. 确认应用程序文件存在 3. 检查是否有足够的权限 4. 查看控制台输出的错误代码 ## 自定义修改 您可以修改以下参数: - 要关闭的进程名称:修改 `killProcessByName()` 的参数 - 延迟时间:修改 `delay()` 函数的参数 - 按键类型:修改 `sendEnterKey()` 函数中的 `VK_RETURN` 为其他虚拟键码 - 应用程序数量:在 `main()` 函数中添加或删除应用打开逻辑