Ограничения операционной системы SendKeys

Существуют ли сложности, связанные с операционной системой, с методом SendKeys vbScript? Я обновляю проект GE Cimplicity 4 на компьютере с Windows XP до проекта GE Cimplicity 10 на виртуальной машине Windows Server 2012 R2.

Метод SendKeys использовался для изменения фокуса вкладки при открытии экрана. Скрипт теперь зависает на неопределенное время независимо от того, какой ключ отправляется с помощью SendKeys. Кто-нибудь сталкивался с зависанием SendKeys после смены операционной системы?

SendKeys “{TAB}”, 1

Документация, на которую я ссылался до сих пор:

http://proscada.ru/cimplicity/bce-lrf/lrfs/sendkeys.statement.htm

https://social.technet.microsoft.com/wiki/contents/articles/5169.vbscript-sendkeys-method.aspx


person Andrew Drake    schedule 18.02.2018    source источник


Ответы (2)


 SendKeys "{TAB}1"

Строки (т.е. текст) должны быть заключены в кавычки.

person acatatwork    schedule 19.02.2018
comment
Вы правы, это опечатка в моем исходном посте. У меня есть кавычки, и они компилируются. Работает в XP, но не в Server 2012 R2. - person Andrew Drake; 19.02.2018
comment
Вы не можете отправлять ключи процессам с другой безопасностью. Это появилось после XP. См. en.wikipedia.org/wiki/User_Interface_Privilege_Isolation. - person acatatwork; 19.02.2018
comment
Ваш синтаксис специфичен для VBA 7. В VBA6/VBScript/VB.NET нет ожидания. Так что только SendKeys "{TAB}". - person acatatwork; 19.02.2018
comment
NoWait является необязательным, я пробовал как с ним, так и без него (без него по умолчанию 0). Оба по-прежнему зависают в Windows Server 2012 R2, но не в XP. Опять же, это не вопрос синтаксиса, а вопрос о том, почему у SendKeys есть проблемы с производительностью в зависимости от операционной системы. - person Andrew Drake; 19.02.2018

Проблема была сужена до более новой функции Microsoft Security под названием «Контроль доступа пользователей (UAC)», которая появилась в Windows Vista. Эту функцию необходимо отключить, чтобы команда sendKeys правильно работала с Cimplicity.

Что касается производительности sendKeys за пределами Cimplicity, sendKeys имеет несколько различных реализаций в зависимости от времени и операционной системы. Чтобы заставить sendKeys использовать только одну реализацию для получения согласованного времени (если согласованность является проблемой), вы можете обновить файл app.config, чтобы принудительно реализовать реализацию, добавив:

<appSettings>
    <add key="SendKeys" value="SendInput"/>
</appSettings>

Справка:

https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx

person Andrew Drake    schedule 19.02.2018