Wshshell sendkeys не работает

VBS: SendKeys не вставляет текст

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 8

1 Тема от griha09 2020-11-02 21:15:09 (изменено: griha09, 2020-11-02 21:16:34)

  • griha09
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Тема: VBS: SendKeys не вставляет текст

Работаю в Total Commander и периодически надо создавать txt-файл с названием файла под курсором. Для этого создал вот такой скрипт с вызовом через панель кнопок ТС:

все работает, кроме вставки «.txt»
Кто подскажет почему SendKeys не вставляет текст?

2 Ответ от wisgest 2020-11-03 10:38:53

  • wisgest
  • Разработчик
  • Неактивен
  • Рейтинг : [ 25 | 0 ]

    Re: VBS: SendKeys не вставляет текст

    TC никогда не пользовался , — проверить, по крайней мере сейчас, не могу. Возможно, дело в текущей раскладке клавиатуры.
    Попробуй добавлять «.txt» в буфер обмена или, вообще, получив текст из буфера обмена создавать файл уже без помощи SendKeys.

    3 Ответ от alexii 2020-11-03 18:13:42

    • alexii
    • Разработчик
    • Неактивен

    Re: VBS: SendKeys не вставляет текст

    Оффтопиком: работайте в Far Manager:

    4 Ответ от griha09 2020-11-04 00:10:33

    • griha09
    • Участник
    • Неактивен
    • Рейтинг : [ 0 | 0 ]

    Re: VBS: SendKeys не вставляет текст

    ну это совсем уж OLD OLD OLD SCHOOL

    Set WshShell = WScript.CreateObject(«WScript.Shell»)
    Set FSO = CreateObject(«Scripting.FileSystemObject»)

    WshShell.SendKeys «» & «^» & ««
    clipboard = CreateObject(«HTMLFile»).parentWindow.clipboardData.getData(«text»)
    file = clipboard & «.txt»
    WshShell.SendKeys «+» & file & «»
    WScript.Sleep 500
    WshShell.SendKeys «+» & «» & «» & ««

    но эта зараза корректно работает только в ENG раскладке и только с ENG именами. Кирилицу просто не видит.

    5 Ответ от griha09 2020-11-04 00:58:02 (изменено: griha09, 2020-11-04 00:59:37)

    • griha09
    • Участник
    • Неактивен
    • Рейтинг : [ 0 | 0 ]

    Re: VBS: SendKeys не вставляет текст

    УРА. У меня получилось. Оказывается точку надо писать так «<.>» Нормально видит кирилицу. Работает только в англ. раскладке, да и фиг с ним.

    Источник

    Объект WScript.Shell метод SendKeys — имитация нажатия клавиш

    Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы затронем такую тему как имитация нажатия клавиш программными средствами с помощью метода SendKeys класса WScript.Shell.

    SendKeys – имитация нажатия клавиш – теоретические основы

    Метод SendKeys, который позволяет имитировать нажатие клавиш и их комбинаций. Метод SendKeys объекта WScript.Shell является по своей природе слепым, так как он не позволяет указать то приложение, которому назначен ввод с клавиатуры, то есть, если мы сделаем попытку имитировать ввод фразы «привет мир», то она будет обрабатываться лишь тому приложениею, которое в данный момент являются активным. Если активным будет текстовый редактор – то в нем отобразится заданный текст, если антивирусная программа – то, скорее всего, никакой активности не произойдет.

    Что бы использовать функцию Wscript SendKeys, нужно объявить переменную, которая будет хранить ссылку на объект WScript.Shell, а уже через эту переменную можно будет вызвать SendKeys.

    Общая логика работы:

    SendKeys (строка) – Видим, что мы в качестве аргумента должны передать строковое выражение, которое будет хранить имя клавиши или сочетание.

    Что бы ввести просто символ или набор символов, мы всего-навсего прописываем их как строку, например: SendKeys(«привет мир»). Для ввода специальных клавиш (например, Enter, стрелки, функциональные клавиши и так далее), их название нужно заключить в фигурные скобки <>.

    Ниже приведен список функциональных клавиш и их обозначение:

    • BACKSPACE —, или
    • BREAK —
    • CAPS LOCK —
    • DEL или DELETE — или
    • СТРЕЛКА ВНИЗ —
    • END —
    • ENTER —или
  • ESC —
  • HELP —
  • HOME —
  • INS или INSERT — или
  • СТРЕЛКА ВЛЕВО —
  • NUM LOCK —
  • PAGE DOWN —
  • PAGE UP —
  • PRINT SCREEN —
  • СТРЕЛКА ВПРАВО —
  • SCROLL LOCK —
  • TAB —
  • СТРЕЛКА ВВЕРХ —
  • F1-
  • F2 —
  • F3 —
  • F4 —
  • F5 —
  • F6 —
  • F7 —

    Если нужно указать сочетание специальных клавиш, то следует использовать следующие коды:

    Также стоит помнить, что для ввода символов +, ^, %,

    , (, ) , <, >, [, ] их также нужно заключить в фигурные скобки.

    Если есть необходимость имитации нажатия клавиши несколько раз подряд, то после нее через пробел прописывается количество, например: – 20 раз подряд нажата клавиша n. Стоит учитывать один немаловажный момент, имитация нажатия клавиши не действует для приложений , которые не были разработаны специально для запуска в Microsoft Windows, например, командная строка .

    SendKeys – имитация нажатия клавиш – приступаем к программированию

    Хорошо, с теорией разобрались, теперь давайте приступим к программированию. Давайте для начала рассмотрим следующий пример программного кода на языке vbscript:

    Видим, что тут мы создали массив символов my_arr(16), их количество составляет 17, так как нумерация элементов массива начинается с нуля. Вы можете возразить, а зачем формировать массив, если все можно прописать в одном строковом значении ? Верно, но, цель сценария не просто отправить коды клавиш, а сделать задержку для каждого символа. Мы видим, что с помощью массива идет обработка каждого элемента, он передается методу SendKeys WScript Shell объекта, после идет задержка в 500 миллисекунд (WScript.Sleep 500), и так для каждого символа. Перед выполнением метода мы запускаем блокнот (WshShell.Run «Notepad.exe», 1) с помощью метода Run (подробно про метод Run я написал в статье «Объект WScript.Shell — метод Run»), поэтому, команды будут передаваться текстовому редактору. Как только все команды будут выполнены, появится сообщение (MsgBox «Конец теста!»), которое проинформирует, что сценарий завершил свою работу. На практике это выглядит так:

    • Запускается блокнот
    • Постепенно вводится текст «это»
    • Делаем два раза имитацию нажатия клавиши Enter ()
    • Постепенно вводится текст «простой»
    • Нажимается два раза клавиша Enter ()
    • Постепенно вводится текст «текст»
    • Появляется сообщение «Конец теста!»

    А вот аналогичный пример, но уже на языке jscript:

    В примере на jscript я мог использовать более лаконичный стиль программирования для массива, но, решил этого не делать, что бы было наглядней видно, что и как. Важно, пока не появится сообщение о том, что сценарий выполнил работу, не переключатся на другие приложения , так как это может привести к неожиданным последствиям.

    А вот еще один пример на vbscript :

    В этом примере мы уже будем направлять с помощью метода SendKeys WScript Shell класса команды программе калькулятор – простая арифметика (100/2*0.5). В конце мы выполним имитацию нажатия комбинации клавиш «ALT + F4«, что бы закрыть калькулятор и выведем сообщение — » Операция выполнена! «. Далее мы снова попытаемся отправить в систему комбинацию «CTRL + ALT + DEL» (запуск диспетчера задач), но, ничего не выйдет, видимо эта комбинация не работает из-за соображений безопасности.

    Ну и пример на языке jscript :

    И так, давайте все подытожим… В этой статье мы рассмотрели функцию SendKeys класса WScript Shell, которая позволяет создавать имитацию нажатия клавиш, мы написали четыре программных кода – два на языке vbscript и два на языке jscript. Помним, что программный код работает под управлением сервера сценариев Windows Script Host.

    Спасибо за внимание. Автор блога Владимир Баталий

    Источник

    Перестал работать WshShell.SendKeys

    Доброго времени суток! Имеется небольшой скрипт по запуску которого должно открываться окно программы для ввода логина и пароля. до сего дня все работало без запинок. перестала работать имитация нажатия клавиш. само окно запускается и ничего не происходит. ошибок тоже никаких не выходит. в поле ввода мигает курсор ожидая ввода логина/пароля но скрипт почему то дальше не хочет имитировать нажатия))). Может кто сталкивался с таким. Винда 7. никаких крахов не было. Проверял на вирусы др.веб- все чисто.

    Помощь в написании контрольных, курсовых и дипломных работ здесь.

    Перестал работать RDP
    Есть бухгалтерский комп. На нем стоит терминальная винда (ставили до меня, так что больше про нее.

    Перестал работать Bluetooth на ноутбуке
    раньше работал, а потом просто перестал. Я не сильно розбираюсь в ноутбуках, и хотел спросить.

    Диспетчер задач перестал работать
    Всем Привет! Такая проблема, раньше диспетчер задач нормально работал и в реальном времени.

    Перестал работать DNS на контроллере домена.
    Добрый день! Возникла следующая ситуация. Имеется домен (W2003). В домене единственный.

    Перестал работать RDP на WinServ 2008R2
    Добрый день, уважаемые форумчане! Перестал работать RDP на WinServ 2008R2 после перезагрузки До.

    После AD перестал работать удаленный рабочий стол
    после AD перестал работать удаленный рабочий стол, все пользователи давлены в нем но выходить такая.

    Перестал работать принтер после отключения служб
    Выполнял отключение служб чтобы исправить проблему с 80 портом. И походу отключил что-то лишнее.

    Доступ к OWA 2013 перестал работать у некоторых пользователей в Хроме
    Добрый день Имеется почтовый сервер поднятый на гипер-в 2012, сам почтовый сервер так же на вин.

    Никак не могу разобраться!Перестал работать РДП на Win 2008 r2
    Добрый день, уважаемые форумчане! Не знаю, в эту ли ветку пишу. Очень нуждаюсь в помощи. .

    WSHShell.SendKeys не воспринимает кавычки
    Всем доброго времени суток! Люди добрые, может кто знает в чем проблема.. // нужно прописать.

    Источник

    WshShell.AppActivate, похоже, не работает в простом скрипте vbs

    total VBS scripting newb здесь. Я пытаюсь автоматизировать закрытие определенного открытого окна, а именно программы HostsMan. Это на Windows 8.1 Pro 64 бит, и это то, что в данный момент мой скрипт выглядит так:

    вторая строка не работает. Я знаю, что строка 3 работает, потому что она активирует меню выключения Windows. Я что-то упускаю?

    Update / more info: ручной ввод alt-F4 закрывает его, поэтому я знаю, что это должно работать. Я также протестировал этот сценарий с другими открытыми окнами и они закрываются просто отлично. Кроме того, HostsMan открывается с правами администратора, поэтому я попытался запустить сценарий как набор задач с самыми высокими привилегиями, чтобы увидеть, будет ли это делать, и все равно не пойдет. Но это работает с другими открытыми окнами, работающими с правами администратора. Неприятно!

    5 ответов

    Я тоже пробовал и не мог заставить его работать. Должно быть, что-то есть в классе window, где AppActivate не видит его как окно верхнего уровня?

    в любом случае AppActivate также позволяет передать идентификатор процесса вместо заголовка окна. Когда я установил HostsMan, имя процесса было hm.exe , поэтому я буду использовать это в моем примере ниже.

    ключ здесь должен поставить небольшую паузу после команды «выполнить», но перед командой «appactivate», чтобы приложение появилось в списке процессов.

    для решения проблемы AppActivate вы должны использовать цикл и оператор условия if, чтобы проверить, являются ли активные окна целевыми окнами или нет, потому что когда-нибудь вы отмените выбор или система отменит выбор целевых окон Перед выполнением sendkeys напрямую, чтобы вы получили ошибку.

    Я создаю этот жесткий строгий способ

    альтернативное решение с использованием WMIService (нет цикла через все необходимые процессы):

    Источник

    Excel VBA SendKeys не работает при попытке отправить надстройку Excel

    Вступление. В моей компании у нас есть надстройка безопасности, установленная в Excel, что предотвращает сохранение новой книги Excel без ввода необходимых параметров.

    Задача: используйте SendKeys для отправки ключей, необходимых для этой надстройки Excel.

    Проблема: при всплывании экрана надстройки (как показано на рисунке ниже) код, похоже, не продолжает эту строку: SendKeys » «, True .

    Мой код (соответствующая часть)

    Изменить 1. Код находится внутри цикла For , я экспортирую фильтрованный DB для каждого пользователя для этого пользователя. Поэтому каждый раз, когда я пытаюсь сохранить файл для одного из пользователей, я буду сталкиваться с надстройкой надстройки (мне нужно ) “ внутри цикла For ).

    @Pierre – ваша идея написать что-то вроде этого ^^?

    Затем вызвать его перед вызовом формы и затем удалить его где-нибудь позже? Сначала я думал, что вы нигде не создаете файл, но теперь я попробовал его, и я заметил. Он должен работать.

    Тот факт, что вы запустили всплывающее окно addin, “заморозило” код.
    Я не знаю, как сделать это асинхронно в VBA (теперь я начал использовать VB.NET, я чувствую себя намного лучше об этом!).
    Лучшее, что я могу придумать, это:
    – сохранить в темном файле (temp.vbs для ex) некоторый код и запустить его перед запуском формы:

    Похоже, что ваш addin тонет рабочую книгу приложения перед тем, как сохранить событие, поэтому быстрое исправление, позволяющее сохранить, было бы снова потопить его, поэтому в вашем коде есть следующие

    В нормальном модуле имеются следующие

    Возьмем класс, называемый clsResinkApplication, и код для этого класса будет следующим:

    А затем в открытой книге вы можете иметь следующие

    Это должно быть переадресовано на ваш накопитель для хранения до добавления.

    Я хотел бы поблагодарить @Vityata, @Pierre за идею сделать это с помощью VBScript, а также написать содержимое VBScipt внутри кода VBA.

    Что я в итоге сделал:

    1. Добавил Call WShellSendKeys перед тем, как позвонить мне.

    2.
    Проверьте, существует ли VBSciprt, если он не создан.

    3.
    Другой Sub, который создает VBScript с помощью SendKeys .

    Источник

    Читайте также:  Как настроить хамачи для калл оф дьюти 5
Оцените статью