Vbscript Sendkeys не работает в некоторых приложениях - PullRequest
0 голосов
/ 11 февраля 2020

Недавно я прогулялся по Google и обнаружил, что такие инструменты, как CCleaner , можно автоматизировать для сканирования и исправления ошибок реестра с помощью сценариев VBScript или AutoIt.

Поскольку я предпочитаю собственные инструменты и библиотеки, поэтому я создал сценарий VBScript для автоматизации процесса очистки реестра (не до последнего нажатия кнопки, поскольку слишком много кнопок для того, чтобы его можно было автоматизировать), как показано ниже:

On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
Set UsrEnvDmn = WshShell.Environment("User")
UsrEnvDmn("CclnrInstDir") = "C:\Program Files\CCleaner"
WshShell.Run """%CclnrInstDir%\\CCleaner64.exe"" /Registry"
WScript.Sleep 1000 : WshShell.AppActivate "CCleaner"
WScript.Sleep 2000 : WshShell.SendKeys "%s"
WScript.Sleep 5000 : WshShell.SendKeys "%f"
Set WshShell = Nothing : Set UsrEnvDmn = Nothing

Но проблема в том, что однажды CCLeaner открывается и фокусируется, функция Sendkeys не щелкает / не выбирает какие-либо кнопки или опции в окне. Если я нажму вручную Alt + s, тогда процесс сканирования действительно запустится, но мне крайне необходимо автоматизировать эту вещь, если это возможно, до самого конца процесса очистки реестра.

Может кто-нибудь по этому поводу руководить?

1 Ответ

0 голосов
/ 11 февраля 2020

См. Раздел замечаний SetForegroundWindow. Ваш сценарий должен соответствовать по крайней мере одному из этих правил при использовании AppActivate (поскольку это то, что AppActivate вызывает). Вы продолжаете спать и теряете право устанавливать переднее окно. См. Документацию CCleaner о лучшем способе https://www.ccleaner.com/docs/ccleaner/advanced-usage/command-line-parameters

Система ограничивает, какие процессы могут устанавливать окно переднего плана. Процесс может установить окно переднего плана, только если выполняется одно из следующих условий:

• Процесс является процессом переднего плана.

• Процесс был запущен процессом переднего плана.

• Процесс получил последнее входное событие.

• Нет процесса переднего плана.

• Процесс отлаживается.

• Процесс переднего плана не Современное приложение или начальный экран.

• Передний план не заблокирован (см. LockSetForegroundWindow).

• Истекло время ожидания блокировки переднего плана (см. SPI_GETFOREGROUNDLOCKTIMEOUT в SystemParametersInfo).

• Нет активных меню.

...