Приостановить процесс windows с макросом

1104
Pier-Olivier Pellerin

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

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

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

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

0
Без особых усилий и в качестве базового решения вы можете создать файл ярлыка для вашего pssuspend.exe, а затем отредактировать его свойства, добавив имя процесса для приостановки в качестве параметра в поле «Цель». Вы можете связать комбинацию клавиш и установить, если она должна быть свернута, например. Вы можете сделать то же самое снова для резюме. Можете ли вы приостановить процесс, который вы имеете в виду, не повышая его? HelpingHand 6 лет назад 0
Спасибо за ответ. Но я не могу понять, как редактировать свойства этого .exe? какие-нибудь намеки? Кроме того, я хотел бы, чтобы это работало при использовании другого полноэкранного приложения без необходимости его минимизации. Pier-Olivier Pellerin 6 лет назад 0
Вы создаете ярлык к нему и редактируете свойства этого. HelpingHand 6 лет назад 0
Еще раз спасибо за ответ, сэр! Кажется, что это работает, когда я нажимаю на ярлык, он запускает pssuspend с правильными аргументами, но новая проблема заключается в том, что когда я назначаю макроклавиатуру моей клавиатуры этому ярлыку, он игнорирует все аргументы и открывает только основной файл без пользовательские аргументы .. есть ли обходной путь? Есть ли способ создать какой-то BAT-файл, чтобы помочь мне? Pier-Olivier Pellerin 6 лет назад 0
В этом случае, как насчет небольшой оболочки exe: Загрузите и установите AutoIt (https://www.autoitscript.com/site/autoit/). Создайте новый текстовый файл, дайте ему имя «suspend.au3». Добавьте 3 строки: `Run (" C: \ SysinternalsSuite \ pssuspend.exe onedrive "," ", @SW_HIDE)` `Sleep (5000)` `Run (" C: \ SysinternalsSuite \ pssuspend.exe onedrive -r ", "", @SW_HIDE) `Отрегулируйте процесс, как требуется, из onedrive выше. Вы можете сохранить, а затем щелкнуть правой кнопкой мыши и выбрать «Complie Script (x86)». Это создаст вам exe. Отрегулируйте его так, как вы хотите, чтобы спать (например, 3 секунды) и отменить, создать exe для каждой задачи и т. Д. HelpingHand 6 лет назад 0
Мне любопытно узнать, оказался ли подход AutoIt более полезным для поведения, за которым вы следите? HelpingHand 6 лет назад 0

1 ответ на вопрос

1
PsychoX

Google search feed for 15 September 2018:

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

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

Запуск 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, созданного для приостановки процесса.