Я работаю над кое-чем, и мне нужно «упростить» работу с Windows, и я немного застрял, я не знаю, можете ли вы, ребята, помочь мне разобраться в этом здесь ... так вот моя проблема и как я хочу это должно быть решено:

Мне нужно быть в состоянии приостановить определенный процесс Windows на X секунд при нажатии кнопок 1 или 2. В идеале одна кнопка для его приостановки с задержкой в X секунд до ее возобновления, но может быть одна кнопка для ее приостановки и еще одна кнопка для ее возобновления.

Я ожидаю, что это будет (тогда agian, может быть немного по-другому): создайте файл .exe и свяжите ярлык файла с программируемой кнопкой на одной из моих макрос-кнопок на клавиатуре. Мне нужна помощь, чтобы выяснить способ кодирования этого во что-то ... Я пытался использовать инструмент под названием pssuspend.exe, но я не мог заставить его работать.

Спасибо за помощь !

1 ответ1

1

Google search feed for 15 September 2018:

Инструмент PsSuspend от PsTools (пакет утилит Microsoft sysinternals )

Поскольку это какой-то официальный инструмент, он может быть лучшим выбором для простых скриптов и автоматизации.

Запуск PsSuspend с идентификатором процесса заставляет его приостановить или возобновить процесс с этим идентификатором на локальном компьютере. Если вы укажете имя процесса, 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 (которые не имеют официальной документации).

Есть хорошее небольшое приложение, которое использует эту технику и версию на C/C++, также на CodeProject (доступен исходный код).

Использование: pausep PID [/r] (ключ /r возобновляет процесс).

Существует версия на C # .NET также на CodeProject.

Также посмотрите на этот ответ Stackoverflow

Более удобный для пользователя метод командной строки (Powershell) из этого ответа:

Как я уже говорил, в командной строке Windows нет никакой утилиты для этого, но вы можете вызывать функцию Windows API из PowerShell. Сначала установите скрипт Invoke-WindowsApi, затем вы можете написать это:

Invoke-WindowsApi "kernel32" ([bool]) "DebugActiveProcess" @([int]) @(process_id_here)

Подобная техника была использована для создания этого скрипта PowerScript, созданного для приостановки процесса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .