@River0051

Как активировать окно exe программы и нажать на кнопку?

Добрый день, есть несколько окон программы с одинаковым названием процесса, как можно по очереди сделать каждое окно активным и нажать на кнопку в окне ?, пробовал делать через nircmd но на некоторых компьютерах (мб дело в сборке винды, причину так и не нашел) окно не становится активным и нажимается кнопка в другом окне, а на некоторых работает, подскажите как можно сделать чтобы работало всегда и везде, наверно я где-то в скрипте допустил ошибку или что-то упустил

Делал так exe.bat
FOR /F "tokens=*" %%G IN ('wmic process where name^="game.exe" get ProcessId ^| FINDSTR /v ProcessId ^| FINDSTR /r /v "^$"') DO (
	%nircmdc% win activate process /!PIDS!%%G
	%nircmdc% sendkeypress f1
	TIMEOUT /T 1 /NOBREAK
)
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Так после активации окна поставьте паузу через TIMEOUT, что бы окно успело получить эту активацию...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov
Пример посылания кнопочки F1 в окошко Visoal Studio Code с помощью PowerShell

Для работы напрямую с оконным API Windows используется модуль
https://github.com/MVKozlov/Powershell-WindowHelper

Надо его скачать и положить или в папку "C:\Program Files\WindowsPowerShell\Modules\WindowHelper"
или в "C:\Users\%Username%\Documents\WindowsPowerShell\Modules\WindowHelper"

# Тут можно импортировать модуль напрямую, если не класть его по вышеуказанным путям
#Import-Module C:\Path\To\Module\WindowHelper.psm1
# Или просто импортировать, если есть в путях (необязательно)
#Import-Module WindowHelper

# Импортируем типы для использования SendKeys
Add-Type -AssemblyName System.Windows.Forms

# Ищем среди всех окон окно с нужным заголовком
$w = Get-ChildWindows | ? { $_.Text -eq 'Visual Studio Code' }
# Клавиши, которые нужно нажимать
# Брать отсюда - https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.sendkeys
$KeySequence = '{F1}'
# Активируем нужное окно
Set-ForegroundWindow $w.Handle
# Небольшая задержка
Start-Sleep -Milliseconds 100
# Посылаем клавиши
[System.Windows.Forms.SendKeys]::SendWait($KeySequence)


P.S. В процессе подготовки вспомнил, что процесс и powershell должны быть в одном контексте - специально из под админа запускать не надо
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы