|
0 / 0 / 1
Регистрация: 17.11.2009
Сообщений: 31
|
|
Имитация нажатий клавиш клавиатуры15.02.2010, 03:24. Показов 131506. Ответов 38
Метки changeclipboardchain, keybd_event, setclipboardviewer, wmchangecbchain, wmdrawclipboard, wm_changecbchain, wm_drawclipboard, буфер обмена windows, наблюдение за буфером, перехват нажатий клавиш (Все метки)
Как соорудить программу, чтобы по нажатию ранее назначеной клавише происходила имитация нажатия некоторой комбинации клавиш. Пример: я нажимаю правый Ctrl программа сама имитирует 5 поочерёдных нажатий клавиши f7, причём с таймаутом 5 секунд. Во многом придёца разбираца, мот кто подкинет нужную литературку?
0
|
|
| 15.02.2010, 03:24 | |
|
Ответы с готовыми решениями:
38
Эмуляция нажатий клавиш
|
|
Junior Developer
44 / 44 / 7
Регистрация: 08.06.2009
Сообщений: 261
|
|
| 15.02.2010, 08:33 | |
|
нужная литература это сам Делфийский хелп... по словам VK_Key
или копай в сторону виртуальной клавиатуры... но мне кажется что твоя задача не выполнима(хотя может просто чего то не знаю..))) ), чтобы повесить на одну клавишу 7 нажатий... хотя... кто его знает..))) З.Ы кстати, в самом хелпе ты найдёшь все кода клавиш...
1
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||||||||||||||||||||||
| 15.02.2010, 09:54 | ||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Для имитации событий от клавиатуры можно посылать сообщения WM_KEYDOWN и WM_KEYUP. Либо есть более удобный способ - применение процедуры keybd_event():
bVk - виртуальный код клавиши. bScan - аппаратный скан-код. Устанавливаем = 0. dwFlags - флаг, задающий нажатие или отпускание клавиши. Если требуется, имитация нажатия: dwFlags = 0, имитация отпускания: dwFlags = KEYEVENTF_KEYUP. Ещё этот параметр может быть установлен = KEYEVENTF_EXTENDEDKEY. - Это значение использовать не будем. Оно связано со скан-кодом. dwExtraInfo - дополнительные данные, связанные с событием от клавиатуры. Установить = 0. --- Например, имитация 5 нажатий клавиши F7:
Например, имитация Ctrl+Shift+z:
Например, имитация ввода в Мемо слова 'Start':
Коды виртуальных клавиш
Virtual Key Code Corresponding key VK_LBUTTON Left mouse button VK_RBUTTON Right mouse button VK_CANCEL Control+Break VK_MBUTTON Middle mouse button VK_BACK Backspace key VK_TAB Tab key VK_CLEAR Clear key VK_RETURN Enter key VK_SHIFT Shift key VK_CONTROL Ctrl key VK_MENU Alt key VK_PAUSE Pause key VK_CAPITAL Caps Lock key VK_KANA Used with IME VK_HANGUL Used with IME VK_JUNJA Used with IME VK_FINAL Used with IME VK_HANJA Used with IME VK_KANJI Used with IME VK_CONVERT Used with IME VK_NONCONVERT Used with IME VK_ACCEPT Used with IME VK_MODECHANGE Used with IME VK_ESCAPE Esc key VK_SPACE Space bar VK_PRIOR Page Up key VK_NEXT Page Down key VK_END End key VK_HOME Home key VK_LEFT Left Arrow key VK_UP Up Arrow key VK_RIGHT Right Arrow key VK_DOWN Down Arrow key VK_SELECT Select key VK_PRINT Print key (keyboard-specific) VK_EXECUTE Execute key VK_SNAPSHOT Print Screen key VK_INSERT Insert key VK_DELETE Delete key VK_HELP Help key VK_LWIN Left Windows key (Microsoft keyboard) VK_RWIN Right Windows key (Microsoft keyboard) VK_APPS Applications key (Microsoft keyboard) VK_NUMPAD0 0 key (numeric keypad) VK_NUMPAD1 1 key (numeric keypad) VK_NUMPAD2 2 key (numeric keypad) VK_NUMPAD3 3 key (numeric keypad) VK_NUMPAD4 4 key (numeric keypad) VK_NUMPAD5 5 key (numeric keypad) VK_NUMPAD6 6 key (numeric keypad) VK_NUMPAD7 7 key (numeric keypad) VK_NUMPAD8 8 key (numeric keypad) VK_NUMPAD9 9 key (numeric keypad) VK_MULTIPLY Multiply key (numeric keypad) VK_ADD Add key (numeric keypad) VK_SEPARATOR Separator key (numeric keypad) VK_SUBTRACT Subtract key (numeric keypad) VK_DECIMAL Decimal key (numeric keypad) VK_DIVIDE Divide key (numeric keypad) VK_F1 F1 key VK_F2 F2 key VK_F3 F3 key VK_F4 F4 key VK_F5 F5 key VK_F6 F6 key VK_F7 F7 key VK_F8 F8 key VK_F9 F9 key VK_F10 F10 key VK_F11 F11 key VK_F12 F12 key VK_F13 F13 key VK_F14 F14 key VK_F15 F15 key VK_F16 F16 key VK_F17 F17 key VK_F18 F18 key VK_F19 F19 key VK_F20 F20 key VK_F21 F21 key VK_F22 F22 key VK_F23 F23 key VK_F24 F24 key VK_NUMLOCK Num Lock key VK_SCROLL Scroll Lock key VK_LSHIFT Left Shift key (only used with GetAsyncKeyState and GetKeyState) VK_RSHIFT Right Shift key (only used with GetAsyncKeyState and GetKeyState) VK_LCONTROL Left Ctrl key (only used with GetAsyncKeyState and GetKeyState) VK_RCONTROL Right Ctrl key (only used with GetAsyncKeyState and GetKeyState) VK_LMENU Left Alt key (only used with GetAsyncKeyState and GetKeyState) VK_RMENU Right Alt key (only used with GetAsyncKeyState and GetKeyState) VK_PROCESSKEY Process key VK_ATTN Attn key VK_CRSEL CrSel key VK_EXSEL ExSel key VK_EREOF Erase EOF key VK_PLAY Play key VK_ZOOM Zoom key VK_NONAME Reserved for future use VK_PA1 PA1 key VK_OEM_CLEAR Clear key --- Аналогично можно имитировать нажатия кнопок мыши. Для этого есть процедура mouse_event(dwFlags, dx, dy, dwData, dwExtraInfo: DWORD). Значения флага dwFlags:
12
|
||||||||||||||||||||||||||
|
1 / 1 / 1
Регистрация: 20.11.2009
Сообщений: 76
|
|
| 16.02.2010, 01:49 | |
|
Мммм... интересно... а как сделать как говорил Kapernik, чтобы между нажатиями был таймаут, заданный в секундах??
Добавлено через 26 минут И вопрос в какой это происходит процедуре и куда она "засовывается" ? И как можно записать значение нажатой клавиши, ну чтобы программа считывала что ты нажал.
1
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||||||||
| 16.02.2010, 08:33 | |||||||||
Сообщение было отмечено как решение
РешениеНо! В нашем случае, перед вызовом процедуры Sleep() надо обязательно вызвать метод: Application.ProcessMessages; - это позволит главному окну приложения обработать сообщения, посланные ему процедурой keybd_event(). Если этого не сделать - тогда все сообщения будут обработаны только после окончания нашей процедуры. Это означает, что все задержки по всем вызовам Sleep() внутри нашей процедуры просуммируются и в течение этого времени никаких изменений в реакции приложения (в том числе на экране, если задумано что-то выводить) не будет.
TForm.KeyPreview = True - в этом случае, события (OnKeyDown, OnKeyUp, OnKeyPress) сначала возникнут на уровне формы и лишь затем будут переданы на уровень компонентов, расположенных на форме.
5
|
|||||||||
|
0 / 0 / 1
Регистрация: 17.11.2009
Сообщений: 31
|
|
| 17.02.2010, 03:20 [ТС] | |
|
Спасибо огромное. Может кто-нибудь подскажет как кнопке (Button1) назначить горячую клавишу и чтобы я сидел в другом открытом приложении и по вызову горячей кнопки выполнялись необходимые операции без скрытия выполняемой программы. Чтобы она работала фоново... Во! ))
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 17.02.2010, 17:42 | |
|
Вот пример глобального хот кея.
1
|
|
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
|
| 21.08.2010, 16:03 | |
|
В программе с помощью keybd_event копирую некий текст, имитируя нажатие Сtrl+A и Ctrl+C, далее с помощью Clipboard.astext записываю в файл содержимое буфера обмена.
Проблема в том, что прога, видимо, сначала пытается записать в файл, а только потом обрабатывает keybd_event. В итоге в файл записывается содержимое буфера, которое было в нем до запуска программы, а текст выделяется и копируется уже после этого. Пробывал вставить Application.ProcessMessages - не помогает.
0
|
|
|
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
|
|
| 21.08.2010, 16:05 | |
|
amakl, без листингов ничего сказать нельзя
0
|
|
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
||||||
| 21.08.2010, 16:31 | ||||||
|
Код:
0
|
||||||
|
{c0Der}
|
|
| 21.08.2010, 19:18 | |
|
amakl, все зависит от объема копируемого текста и быстродействия твоего компа, проверено на практике...
Решения могу предложить 3: 1) вставка задержки (подбирается пробным путем); 2) замена "Ctrl+C" на "Ctrl+X" и перед выводом текста в файл переодичная проверка текста окна; 3) замена всех кейбордных операций на ф-ии работы с окнами (поиск окна), считывание текста и т.д.
0
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 22.08.2010, 14:28 | ||||||
|
Amakl, если перевод фокуса ввода на поле редактирования выполнен верно, то в таком виде заработает:
--- И ещё надо иметь в виду, что, например, TMemo не умеет выделять весь текст по Ctrl+A. По Ctrl+A текст умеет выделять TRichEdit.
0
|
||||||
|
{c0Der}
|
||||||
| 22.08.2010, 18:46 | ||||||
|
Mawrat, попробуй свой код на блокноте, в котором открыт файл на 2-3 МБ...
только если заставить ее выполниться в контексте проги из которой копируем и дождаться от нее ответа
0
|
||||||
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||
| 22.08.2010, 20:53 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
||
| 23.08.2010, 01:30 | ||
|
2-й вариант не совсем понял, но поскольку из окошка нельзя вырезать, он, видимо, не годится. 1-й вариант с задержкой попробывал - работает. Вопрос - насколько надежен данный метод? На других компах с меньшим быстродействием может не сработать? Могут ли быть ситуации (например, большая нагрузка на процессор), когда метод не сработает?
0
|
||
|
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
|
|
| 23.08.2010, 10:15 | |
|
amakl, а покер рум случаем не partypoker.com? А то, если что, могу исходники кинуть
0
|
|
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
|
| 23.08.2010, 12:21 | |
|
iama,
рум FullTiltPoker
0
|
|
|
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
|
|
| 23.08.2010, 12:27 | |
|
amakl, жаль, этот рум я не знаю
0
|
|
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
||
| 24.08.2010, 02:14 | ||
|
Придется, видимо, ставить большой sleep.
0
|
||
| 24.08.2010, 02:14 | |
|
Помогаю со студенческими работами здесь
20
Подсчет нажатий клавиш на клавиатуре
Память процесса, эмуляция нажатий клавиш Имитация нажатия клавиш Имитация нажатия клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|