Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 19.10.2015
Сообщений: 189

Эмуляция нажатия клавиш

03.04.2019, 10:04. Показов 2534. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане !
Visual Basic
1
2
3
4
5
Dim WshShell
Set WshShell = CreateObject("WScript.Shell") 
WshShell.AppActivate ("Блокнот") , true
wscript.sleep 1000
WshShell.SendKeys "(%{F4})"
На просторах интернета нашёл скрипт имитации нажатия клавиш программными средствами с помощью метода SendKeys класса WScript.Shell. Как его доработать чтобы скрипт активировал не окно программы, а процесс, и если данный процесс не найден, то действие (нажатие клавиш) не происходило.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2019, 10:04
Ответы с готовыми решениями:

Эмуляция нажатия клавиш
Хочу написать программу, что бы она сама выполняла определенные действия клавиатуры за меня. как это возможно сделать?8-)

Эмуляция нажатия клавиш в стороннем приложении
Добрый день. Есть тестовое приложение, оно содержит один элемент меню, на котором висит shortcut(Ctrl+L) и командную кнопку. Если я нажимаю...

Эмуляция клавиш на уровне драйвера
В общем есть функция keybd_event она эмулирует нажатие клавиш на уровне Windows но мне надо эмулировать нажатия клавиш на уровне драйвера...

1
 Аватар для Sur_L
103 / 63 / 10
Регистрация: 13.02.2017
Сообщений: 178
05.04.2019, 16:07
Цитата Сообщение от lapin9126 Посмотреть сообщение
чтобы скрипт активировал не окно программы, а процесс
Как я понимаю, SendKeys не умеет слать кому-то конкретно, получает всегда активное окно.
Но этим может заняться API SendMessage. Как прикрутить апи к скрипту - https://www.cyberforum.ru/post5932812.html

А вот как достать текст из окна блокнота, я не понял.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
On Error Resume Next
Set Wrap = CreateObject("DynamicWrapperX.2")
if Wrap is nothing then
    if msgbox("Необходимо зарегистрировать библиотеку DynamicWrapperX. Продолжить?", vbYesNo + vbInformation) = vbYes then
        with CreateObject("WScript.Shell")
            .Run """" & CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & _
                "\regdynwrapx.bat" & """ """" """ & WScript.ScriptFullName & """", 1, false
            WScript.Quit 0
        end with
    else
        WScript.Quit 1
    end if
end if
On Error Goto 0
' Если нужно вызвать функцию из 32-битной библиотеки, уберите знаки комментариев ниже
'Dim SysWOW64: SysWOW64 = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%SystemRoot%") & "\SysWOW64"
'with CreateObject("Scripting.FileSystemObject")
'   if .FileExists(SysWOW64 & "\WScript.exe") then
'       if strcomp(.GetBaseName(.GetParentFolderName(WScript.FullName)), "SysWOW64") <> 0 then
'           CreateObject("Shell.Application").ShellExecute "WScript.exe", """" & WScript.ScriptFullName & """", SysWOW64, "open", 1
'           WScript.Quit 0
'       end if
'   end if
'end with
 
Wrap.Register "User32", "FindWindow", "i=ss", "r=h"
Wrap.Register "User32", "ShowWindow", "i=hl", "r=l"
Wrap.Register "User32:SendMessage", "SendText", "i=hlls"
'Wrap.Register "User32:SendMessage", "GetText", "i=hlps"
Wrap.Register "User32:SendMessage", "GetTextLen", "i=hlll", "r=l"
Wrap.Register "User32", "FindWindowEx", "i=hlss", "r=h"
 
Const SW_SHOWNORMAL = 1
Const SW_MINIMIZE = 6
Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
 
HANDLE = Wrap.FindWindow("Notepad", 0)
if HANDLE <> 0 then
   HWND = Wrap.FindWindowEx (HANDLE, 0, "Edit", "")
   if HWND <> 0 then
        txtLen = Wrap.GetTextLen (HWND, WM_GETTEXTLENGTH, 0, 0)
    Wrap.SendText HWND, WM_SETTEXT, 0, "текст в блокноте"
   else
       msgbox ("Нет такого окна.")
   end if
else
   msgbox ("Блокнот не запущен.")
end if
Добавлено через 1 час 24 минуты
Цитата Сообщение от Sur_L Посмотреть сообщение
А вот как достать текст из окна блокнота, я не понял.
Теперь понял.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Wrap.Register "User32", "FindWindow", "i=ss", "r=h"
Wrap.Register "User32", "ShowWindow", "i=hl", "r=l"
Wrap.Register "User32:SendMessage", "SendText", "i=hlls"
Wrap.Register "User32:SendMessage", "GetText", "i=hllS"
Wrap.Register "User32:SendMessage", "GetTextLen", "i=hlll", "r=l"
Wrap.Register "User32", "FindWindowEx", "i=hlss", "r=h"
 
Const SW_SHOWNORMAL = 1
Const SW_MINIMIZE = 6
Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
 
HANDLE = Wrap.FindWindow("Notepad", 0)
if HANDLE <> 0 then
   HWND = Wrap.FindWindowEx (HANDLE, 0, "Edit", "")
   if HWND <> 0 then
        txtLen = Wrap.GetTextLen (HWND, WM_GETTEXTLENGTH, 0, 0)
    oldText = Space(txtLen)
    Wrap.GetText HWND, WM_GetText, txtLen+1, oldText 'Wrap.StrPtr(oldText)
    'msgbox oldText
    Wrap.SendText HWND, WM_SetText, 0, oldText & "текст в блокноте" & vbCrLf
   else
       msgbox ("Нет такого окна.")
   end if
else
   msgbox ("Блокнот не запущен.")
end if
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2019, 16:07
Помогаю со студенческими работами здесь

Эмуляция нажатия CommandButton1 на UserForm1
Добрый день! Помогите, пожалуйста, разобраться как работать с эмуляцией нажатия кнопки на форме. У меня есть UserForm1 на которой...

Имитация нажатия клавиш
Здравствуйте. Пожалуйста помогите с кодом. Нужно написать программу, что бы при нажатии &quot;Q&quot; нажималась ПКМ затем через долю...

Отслеживание нажатия комбинаций клавиш
как это сделать? есть примеры?

Имитация нажатия клавиш в приложении
в игре нужно постоянно нажимать пробел! подскажите как сделать чтобы это было автоматически?

Как имитировать нажатия клавиш
Знаю такое уже было, а именно тут: http://www.sql.ru/forum/932574/vb6-peredacha-storonnimu-oknu-nazhatie-klavishi Не знаю как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru