|
0 / 0 / 1
Регистрация: 17.11.2009
Сообщений: 31
|
|
Имитация нажатий клавиш клавиатуры15.02.2010, 03:24. Показов 131564. Ответов 38
Метки changeclipboardchain, keybd_event, setclipboardviewer, wmchangecbchain, wmdrawclipboard, wm_changecbchain, wm_drawclipboard, буфер обмена windows, наблюдение за буфером, перехват нажатий клавиш (Все метки)
Как соорудить программу, чтобы по нажатию ранее назначеной клавише происходила имитация нажатия некоторой комбинации клавиш. Пример: я нажимаю правый Ctrl программа сама имитирует 5 поочерёдных нажатий клавиши f7, причём с таймаутом 5 секунд. Во многом придёца разбираца, мот кто подкинет нужную литературку?
0
|
|
| 15.02.2010, 03:24 | |
|
Ответы с готовыми решениями:
38
Эмуляция нажатий клавиш
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 24.08.2010, 11:24 | ||||||
|
Amakl, по результатам поиска в инете на тему: "наблюдение за буфером обмена Windows", написал демонстрационный проект.
За основу взял эту статью.
--- Ещё надо иметь в виду, что при встраивании в цепочку наблюдения, то сразу же приходит сообщение WM_DRAWCLIPBOARD - т. е. что содержание буфера поменялось.
1
|
||||||
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
|
| 25.08.2010, 10:42 | |
|
Mawrat,
спасибо огромное за внимание к моим проблемам. Пытаюсь разобраться в присланной программе, со средствами объектного программирования я очень мало знаком. Забыл сказать, что мое приложение - консольное. Твоя программа отсеживает все изменения буфера обмена. Мне надо узнать, когда в буфер обмена попадет информация, скопированная по ctrl+C моей же программой в окне другого приложения. Не упрощает ли это задачу, ведь я знаю откуда ждать сообщение. Я пытаюсь заменить задержку sleep на что-то вроде: SetClipboardViewer(wnd0); //делаю свое окно наблюдателем буфера, wnd0 - дескриптор окна моей программы //здесь, я так думаю должен быть цикл, заканчивающийся при приеме сообщения WM_CHANGECBCHAIN ChangeClipboardChain(wnd0,wnd2); //прекращаю быть наблюдателем буфера Может подскажешь еще раз, как это правильно организовать?
0
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 25.08.2010, 11:17 | |
|
Amakl, я вечером сегодня допишу - чтобы в БО (буфере обмена) отслеживались только те изменения, которые выполняются по серии вызовов keybd_event() из программы.
0
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 26.08.2010, 02:18 | ||||||
|
Вот вариант с копированием из Блокнота Windows:
2
|
||||||
|
0 / 0 / 0
Регистрация: 21.08.2010
Сообщений: 24
|
|
| 28.08.2010, 19:35 | |
|
Mawrat, в таком виде вроде все понятно, несколько смущает только наличие задержки после активации окна. Вроде бы все затевалось, чтобы избавиться от нее. Наверное, на активацию окна требуется гораздо меньше времени, чем на копирование в буфер?
0
|
|
|
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 28.08.2010, 22:51 | |
|
Да - если целевое окно изначально неактивное, пришлось в примере задержку использовать - ожидать когда процесс активации завершится. Если целевое окно изначально активно - задержка не нужна.
--- Вообще оказалось, что активировать окно - переместить его на передний план и перевести на него фокус ввода - это, как ни странно, не такая уж простая задача. ![]() Вот, например, нашёл исследование на эту тему. Там приведён вариант решения. Но это несколько больше, чем "пара операторов".
0
|
|
|
0 / 0 / 0
Регистрация: 10.07.2015
Сообщений: 2
|
|
| 17.11.2010, 14:06 | |
|
Доброго времени суток.
нужна такая программа:при нажатии одной клавиши(любой) программа выполняет такие действия: нажатие клавиши "р"(англ h) с удержанием нажатия на определенное время,далее "р" отпускается и одновременно идет нажатие клавиши "п"(англ g) тоже на опред время.и так последовательно,пока программа не будет остановлена(тоже какой-то одной клавишей видимо). p.s. Видел,что в принципе примерно то же самое уже разбиралось выше,но самому,к сожалению,разобраться с этим не удалось,поэтому обращаюсь за помощью.если кто поможет с программой,подскажите еще,где ее вводить(в командной строке или где).
0
|
|
|
2 / 2 / 0
Регистрация: 21.01.2011
Сообщений: 10
|
|||||||
| 21.01.2011, 16:06 | |||||||
|
Можно интервал задать ещё через Timer, указав интервал в свойстве таймера в милисекундах. Но его использовать можно только тогда, когда нужно многократное нажатие на одну и ту же клавишу:
0
|
|||||||
|
10 / 10 / 4
Регистрация: 14.01.2010
Сообщений: 80
|
|||||||||||
| 14.04.2011, 18:09 | |||||||||||
|
Подскажите, почему не работает такой код?:
0
|
|||||||||||
|
SBARTACO
|
||||||||||||||||
| 14.06.2011, 19:50 | ||||||||||||||||
|
Возникла проблема, вот код нажатия на Shift+Insert
Программа открывает диалоговое окно вставки изображения, и вставляет путь к файлу. На 2х- компьютерах из 6-ти не чего не происходит. Приведу весь код:
|
||||||||||||||||
|
1 / 1 / 0
Регистрация: 03.02.2012
Сообщений: 11
|
|
| 07.02.2012, 17:34 | |
|
Какими командами можно реализовать подобное на окно не в фокусе, но цепочки нажатия кнопок не нужны?
Например, как отправить тому же неактивному Notepad'у «Пробел», букву "А" и Enter? Просто по очереди, сколько не бился наткнулся на комманды вида: ::PostMessage( hwnd, WM_KEYDOWN, 0x41, 0 ); ::SendMessgae( hwnd, WM_UNICHAR, L'a', 0 ); Сколько с этими командами не бился блокнот на них не реагирует, а команда "Keybd_event" работает только в активном окне...
0
|
|
|
cybzzz
|
||||||||||||
| 05.04.2012, 16:57 | ||||||||||||
|
А кто-то знает как реализовать посыл нажатия клавиш по хоткею? Почти так, как написал топикстартер:
Жму F1 (к примеру), в программу некую посылается кнопка F5 (например). Я пишу вот так:
В то же время, если я h:=;postmessage() вставляю в buttonclick и кликаю по кнопочке на форме - всё прекрасно в блокноте проходит. Помогите, пожалуйста. Добавлено через 43 минуты Ой. Не знаю как отредактировать сообщение. Но по F1 как раз работает. А в реальном приложении я пробовал отловить Ctrl+F12. Добавлено через 32 минуты Мда. Как оказалось всё просто с блокнотом. А как в другую программу послать клавиши? ![]() Если меняю 'Notepad' на что-то другое (Far, Microsoft Word) - не получается...
|
||||||||||||
|
1 / 1 / 0
Регистрация: 03.02.2012
Сообщений: 11
|
|
| 05.04.2012, 17:17 | |
|
с Word'ом всё сложнее, он поделён на кучу подклассов и чтобы написать что-то на первом листе например нужно докопаться до его Индентификатора, иначе прога не пошлёт ему нажатие кнопок.
получается чти ищем окно ворда, а потом по имени класса ищем необходимый нам Хэндл. SPY++ тебе в помощь.
0
|
|
|
cybzzz
|
|
| 05.04.2012, 17:42 | |
|
А если не в word? Мне, например, хочется попробовать что-то послать вообще в WoW.exe
![]() (если кто не понял: World of Warcraft) |
|
|
1 / 1 / 0
Регистрация: 03.02.2012
Сообщений: 11
|
|
| 05.04.2012, 17:47 | |
|
я писал свой макрос нажатия кнопок для другой игры, и то он работал только в активном режиме, к мыше прикоснуться было нельзя так сказать, и я использывал команды bd_event
0
|
|
|
Купер)
|
|
| 18.05.2012, 22:23 | |
|
Доброго дня всем
подскажите как сделать сочетание клавиш ctrl+f для осуществления поиска из списка |
|
|
6 / 6 / 0
Регистрация: 20.02.2010
Сообщений: 44
|
|
| 22.11.2012, 18:37 | |
|
Кто знает как по событию onEnter программно нажать клавишу "End".
0
|
|
|
10 / 10 / 4
Регистрация: 14.01.2010
Сообщений: 80
|
|||||||
| 22.11.2012, 18:54 | |||||||
|
Т.е.:
0
|
|||||||
|
6 / 6 / 0
Регистрация: 20.02.2010
Сообщений: 44
|
|
| 22.11.2012, 19:10 | |
|
keybd_event(Ord(35), 0, 0, 0);
keybd_event(Ord(35), 0, KEYEVENTF_KEYUP, 0); Спасибо!!! Всё как надо.
0
|
|
| 22.11.2012, 19:10 | |
|
Помогаю со студенческими работами здесь
39
Подсчет нажатий клавиш на клавиатуре
Память процесса, эмуляция нажатий клавиш Имитация нажатия клавиш Имитация нажатия клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
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
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|