Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 45

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне

29.07.2016, 15:43. Показов 4108. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2016, 15:43
Ответы с готовыми решениями:

Сохранять переменные между нажатиями кнопок
Люди, здравствуйте. Есть ли способ сохранять переменные между нажатиями кнопок? И Статики тут не подходят. Ибо они сохраняют...

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?

Имитация нажатия кнопок в неактивном окне
Есть приложение, игра. Надо нажимать , допустим F1, в неактивном окне. PostMessage справляется на ура, но приложение отслеживает вызов...

6
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.07.2016, 16:15
Повесить на кнопку примерно такой код
PureBasic
1
2
3
Key = 'A'
 keybd_event_(Key, 0, 0, 0)
 keybd_event_(Key, 0, #KEYEVENTF_KEYUP, 0)
В зависимости от раскладки в окно с фокусом пошлем букву "а" или "ф"

Добавлено через 1 минуту
Или более полная и сложная прцедура
PureBasic
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Procedure SendKeys(handle,keys$,window$="") 
     
   If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle. 
   Debug handle
    If IsWindow_(handle)=0 ; Does the target window actually exist? 
    ProcedureReturn 0 ; Nope, so report 0 for failure to type. 
    Else 
    ; This block gives the target window the focus before typing. 
    thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0) 
    thread2=GetWindowThreadProcessId_(handle,0) 
    If thread1thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf 
    SetForegroundWindow_(handle) ; Target window now has the focus for typing. 
    Sleep_(125) ; 1/8 second pause before typing to prevent fast CPU problems. 
    ; Now the actual typing starts. 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key before typing. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key before typing. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key before typing. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key before typing. 
    For r=1 To Len(keys$) 
    vk=0 : vk$=Mid(keys$,r,1) 
    If vk$="{" ; Special key found. 
    s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key. 
    s$=Mid(keys$,r+1,s) ; Get special key name. 
    Select s$ ; Get virtual key code of special key. 
    Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down. 
    Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT. 
    Case "BACKSPACE" : vk=#VK_BACK 
    Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down. 
    Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL. 
    Case "DELAY" : vk=0 : Sleep_(1000) ; Delay typing for one second. 
    Case "DELETE" : vk=#VK_DELETE 
    Case "DOWN" : vk=#VK_DOWN 
    Case "END" : vk=#VK_END 
    Case "ENTER" : vk=#VK_RETURN 
    Case "ESCAPE" : vk=#VK_ESCAPE 
    Case "F1" : vk=#VK_F1 
    Case "F2" : vk=#VK_F2 
    Case "F3" : vk=#VK_F3 
    Case "F4" : vk=#VK_F4 
    Case "F5" : vk=#VK_F5 
    Case "F6" : vk=#VK_F6 
    Case "F7" : vk=#VK_F7 
    Case "F8" : vk=#VK_F8 
    Case "F9" : vk=#VK_F9 
    Case "F10" : vk=#VK_F10 
    Case "F11" : vk=#VK_F11 
    Case "F12" : vk=#VK_F12 
    Case "HOME" : vk=#VK_HOME 
    Case "INSERT" : vk=#VK_INSERT 
    Case "LEFT" : vk=#VK_LEFT 
    Case "PAGEDOWN" : vk=#VK_NEXT 
    Case "PAGEUP" : vk=#VK_PRIOR 
    Case "PRINTSCREEN" : vk=#VK_SNAPSHOT 
    Case "RIGHT" : vk=#VK_RIGHT 
    Case "SCROLL" : vk=#VK_SCROLL 
    Case "SPACE" : vk=#VK_SPACE 
    Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down. 
    Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT. 
    Case "TAB" : vk=#VK_TAB 
    Case "UP" : vk=#VK_UP 
    Case "WINDOWS" : vk=#VK_LWIN 
    EndSelect 
    If Left(s$,3)="ALT" And Left(s$,7)="CONTROL" And Left(s$,5)="SHIFT" 
    If vk0 
    keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key. 
    EndIf 
    EndIf 
    r+s+1 ; Continue getting the keystrokes that follow the special key. 
    Else 
    vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found. 
    If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character. 
    keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key. 
    If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character. 
    EndIf 
    Next 
    If thread1thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window! 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key in case user forgot. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key in case user forgot. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key in case user forgot. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key in case user forgot. 
    ProcedureReturn 1 ; Report successful typing! :) 
    EndIf 
    EndProcedure
0
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 45
31.07.2016, 11:18  [ТС]
А как обозначить стрелки?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
31.07.2016, 17:30
Цитата Сообщение от Alberto Посмотреть сообщение
А как обозначить стрелки?
См. полный код процедуры SendKeys
PureBasic
1
2
3
4
#VK_DOWN
#VK_LEFT
#VK_RIGHT
#VK_UP
0
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 45
15.11.2016, 18:06  [ТС]
А как обозначить нажатие левой или правой кнопкой мыши?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
16.11.2016, 06:22
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure MouseEvent(Ereignis.l) 
  Mem.l=GlobalAlloc_(0,8) 
  GetCursorPos_(Mem) 
  mouse_event_(Ereignis|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
  GlobalFree_(Mem) 
EndProcedure 
 
;Пример: эмуляция правого клика мыши
MouseEvent(#MOUSEEVENTF_RIGHTDOWN) 
MouseEvent(#MOUSEEVENTF_RIGHTUP)
Другие константы
; Левая
#MOUSEEVENTF_LEFTDOWN
#MOUSEEVENTF_LEFTUP
; Средняя
#MOUSEEVENTF_MIDDLEDOWN
#MOUSEEVENTF_MIDDLEUP
0
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 45
17.11.2016, 17:55  [ТС]
Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2016, 17:55
Помогаю со студенческими работами здесь

Имитация нажатия кнопок
День добрый подскажите а возможно ли средствами VBS имитировать нажатие кнопок к примеру при установки программы выскакивает два...

Отлов нажатия кнопок в модальном окне
Не могу получить нажатия клавиш enter ctrl alt в модальном окне. Параметр KeyPreview стоит в обоих окнах true. Порядок действий: ...

Ремонт кнопок тайч-пада и клавиатуры (замена кнопок)
Доброго времени суток. У меня появился нетбук ASUS EeePC 900 HA с несколькими проблемами: на клавиатуре отсутствует кнопка INS на...

Назначение комбинаций клавиатуры для нажатия кнопок на форме
здравствуйте ) как прикрепить к кнопкам определенные клавиши, при нажатии на которые будут срабатывать кнопки??? Заранее блаодарен ) )

Калькулятор (перевод нажатия клавиш клавиатуры в нажатие кнопок)
Здравствуйте. У меня тут проблема-не могу запрограммировать калькулятор, чтобы он эмулировал нажатие клавиш(+,-,*,/,Esc и Enter), как в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru