我正在做一些小事,我需要“简化”一个 Windows 操作,但我有点卡住了,我不知道你们是否能帮我解决这个问题。所以这是我的问题以及我希望如何解决它:
我需要能够通过按下 1 或 2 个按钮暂停特定 Windows 进程 X 秒。理想情况下,一个按钮暂停进程,延迟 X 秒后恢复,但也可以是一个按钮暂停进程,另一个按钮恢复进程。
我期望它应该是(再次,可能会有点不同):创建一个 .exe 文件并将文件快捷方式绑定到键盘上宏按钮之一上的可编程按钮。我需要帮助来找出一种方法将其编码成某种东西。我尝试使用一个名为 pssuspend.exe 的工具,但我无法让它工作。
谢谢您的帮助 !
答案1
我偶然发现了这个问题,希望找到一个专门适用于侠盗猎车手在线版的解决方案。这是一个众所周知的“解决方法”,你可以在 Windows 资源监视器中暂停 gta5 进程约 5-10 秒,然后恢复,从而在短时间内玩单人在线会话。如果有人也在寻找一个简单的 PowerShell 脚本来加快这个过程,下面是我如何使用 PsychoX 的答案来组合一些易于从快捷方式运行的东西:
#Download PsSuspend from Microsoft
#https://docs.microsoft.com/en-us/sysinternals/downloads/pssuspend
#Set below path to where you unzipped PsSuspend
$PATH = "C:\Users\User\Directory\PSTools\"
cd $PATH
.\pssuspend.exe gta5
Start-Sleep -s 10
.\pssuspend.exe gta5 -r
EXIT
确保将 $PATH 变量更新为解压 PsSuspend 的位置。我发现将 Start-Sleep -s 设置为 5 太短了,10 似乎每次都有效,但可以根据需要进行修改以暂停任何进程一段时间然后恢复。从这里,您可以将其保存为 PowerShell 脚本,然后从快捷方式执行。只需确保您的 PowerShell 执行策略通过 Set-ExecutionPolicy 正确配置即可。
这可能是完成原始要求的最快和最肮脏的方法。
答案2
Google search feed for 15 September 2018:
PsSuspend
工具来自PsTools
(Microsoftsysinternals
实用程序包)
由于这是某种官方工具,它可能是简单脚本和自动化的最佳选择。
跑步暂停带有进程 ID 的命令指示它在本地计算机上暂停或恢复该 ID 的进程。如果指定进程名称,PsSuspend 将暂停或恢复所有具有该名称的进程。指定 -r 开关可恢复暂停的进程。
用法:pssuspend [- ] [-r] [\\computer [-u username] [-p password]] <process name | process id>
使用Windows API的简单程序:SuspendThread
和ReasumeThread
Windows 有一些与暂停和恢复线程相关的函数(因此处理某种类型的线程)。该kernel32.dll
库提供SuspendThread
和ReasumeThread
。警告!此功能也有 64 位版本Wow64SuspendThread
并且Wow64ResumeThread
(没有官方文档)。
有不错的小应用程序也使用该技术CodeProject 上也有 C/C++ 版本(提供源代码)。
用法:(pausep PID [/r]
开关/r
重新开始该过程)。
有C# .NET 版本也在 CodeProject 上。
另请查看这个 Stackoverflow 答案
更加用户友好的命令行(Powershell)方法来自该答案:
正如我所说,Windows 命令行没有任何实用程序可以执行此操作,但您可以从 PowerShell 调用 Windows API 函数。首先安装 Invoke-WindowsApi 脚本,然后您可以编写以下内容:
Invoke-WindowsApi "kernel32" ([bool]) "DebugActiveProcess" @([int]) @(process_id_here)
类似的技术被用来创造此 PowerScript 脚本为进程暂停而创建。
答案3
我写这个是为了在我的用例中替换 PsSuspend。(不包含完整的 PsSuspend 功能)
https://github.com/craftwar/suspend
它支持unicode和多个目标进程。
您不需要多次运行PsSuspend来暂停多个进程。(它非常慢)