Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vlasssov
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 07.07.2009 (Вт) 9:36

Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение Vlasssov » 21.08.2009 (Пт) 6:05

Периодически всплывает вопрос, о том как передать нажатие мыши или клавиатуры другому приложению. Вопрос для профессионалов хочеться поставить по другому: а никто не видел готового класса, который реализовывал бы все аспекты данной проблемы?
Например. Для того, чтобы передать нажатие мыши в приложение А, надо сначала найти окно приложения А, его hwd, потом подоэдать реакцию, знать системные константы и т.д.
Есть такое приложение
Macro Scheduler Pro
http://www.mjtnet.com/
которое в полной мере реализовывает данные функции. Но для того, чтобы реализовать их в своей программе - нужен classVB. Функций немного, самому разбираться, в правильной последовательности их применения и значении констант несколько утомительное, да и наверняка есть готовый класс. Если нет - будем разбираться... :lol:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение alibek » 21.08.2009 (Пт) 8:57

Обоснуй появление этой темы в данном разделе.
Lasciate ogni speranza, voi ch'entrate.

Vlasssov
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 07.07.2009 (Вт) 9:36

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение Vlasssov » 21.08.2009 (Пт) 10:34

Обосновываю:
При возникновении данного вопроса, как правило отсылают к двум-трем функциям APi типа
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
И тому подобное...
Но применение только одной функции - нереально. Сразу возникает куча вопросов:
Как получить HWND окна, куда будут передаваться сообщения?
Как организовать задержку реакции приложения, на выполнение определенной команды.
И т.д.

В приведенной мною ссылке рассматривается скриптовый редактор Macro Scheduler Pro
Вот пример скрипта записанного и отредактированного для работы с notepad.exe (чисто для примера)
Run>Notepad.exe
WaitWindowOpen>Untitled - Notepad
Send>Hello World
Press Enter * 2
Wait>1
Wait>4.46
Send>ddddd
Wait>0.3
MouseMove>140,104
Wait>0.71
LClick
Wait>0.31
MouseMove>153,215
Wait>1.24
LClick
WaitWindowOpen>Сохранить как
MoveWindow>Сохранить как,121,122
ResizeWindow>Сохранить как,428,310
Wait>1.32
MouseMove>220,240
Wait>2.5
Send>123
Wait>0.53
MouseMove>486,338
Wait>0.83
LClick

Вот и интересуюсь я у профессионалов - никто не встречал на просторах Интернета, класс VB, который реализовывал такую схему передачи клавиш, где все действия непосредственно с Api функциями заложены внутрь и есть у этого класса методы похожие на описанные:

Перемещение мыши в позицию
Нажатие левой клавиши
Ожидание окна
Пересылка сообщения
и т.д.

Реализация данной задачи с помощью Api-функций вполне возможна, только не очень хочется, если есть готовый класс. А уж знать о таком могут только профессионалы!!! А если класса нет, очень надеюсь, что с помощью профессионалов его реализовать.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение alibek » 21.08.2009 (Пт) 11:06

Vlasssov писал(а):Реализация данной задачи с помощью Api-функций вполне возможна, только не очень хочется, если есть готовый класс. А уж знать о таком могут только профессионалы!!! А если класса нет, очень надеюсь, что с помощью профессионалов его реализовать.

Неубедительно. Переношу.
Lasciate ogni speranza, voi ch'entrate.

Vlasssov
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 07.07.2009 (Вт) 9:36

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение Vlasssov » 21.08.2009 (Пт) 11:28

Лучше сразу удали.. Если люди не понимают важности задач решаемых при эмуляции интерфейсов программ, то их сложно назвать профессионалами... А остальные опять будут гнать туфту про sendmessage... Что-то типа вот этого:

Код: Выделить всё
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'bVk - Виртуальный код клавиши для имитации нажатия и отпускания клавиши.
'bScan - Зарезервировано -- установлено в 0.
'dwFlags - Комбинация следующих флагов определяет различные способы имитации:
'KEYEVENTF_EXTENDEDKEY - Префикс скэн-кода с префиксным байтом, имеющим значение &HE0.
'KEYEVENTF_KEYUP - Клавиша, указанная в bVk будет отпущена. Если этот флажок не определен, клавиша будет нажата.
'dwExtraInfo - Дополнительное 32-разрядное значение, связанное с событием клавиатуры.
Const KEYEVENTF_KEYUP = &H2 'событие отпускания клавиши
Const VK_ADD = &H6B  'клавиша +
Const VK_CONTROL = &H11 'клавиша Ctrl
Const VK_TAB = &H9 'клавиша Tab
Const VK_MENU = &H12  'клавиша Alt
Const VK_ESCAPE = &H1B  'клавиша Escape
Const VK_LWIN = &H5B 'левая клавиша, эмулирующая нажатие кнопки ПУСК

Private Sub ShowStartMenu()
'Функция эмулирует нажатие Ctrl + Esc
Call keybd_event(VK_CONTROL, 0, 0, 0) 'Hажимаем Ctrl
Call keybd_event(VK_ESCAPE, 0, 0, 0) 'Hажимаем Esc
Call keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Esc
Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) 'Отпускаем Ctrl
End Sub

Private Sub Command1_Click()
ShowStartMenu
End Sub

'эмуляция нажатия клавиши Alt
Call keybd_event(VK_ADD, 0, 0, 0)
Call keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0)
'эмуляция нажатия левой кнопки с логотипом Windows
Call keybd_event(VK_LWIN, 0, 0, 0)
Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
'Запустить проводник
Call keybd_event(VK_LWIN, 0, 0, 0)
Call keybd_event(69, 0, 0, 0)
Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
'поиск файла
'Call keybd_event(VK_LWIN, 0, 0, 0)
'Call keybd_event(70, 0, 0, 0)
'Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)

Private Const VK_ADD = &H6B
Private Const VK_ATTN = &HF6
Private Const VK_BACK = &H8
Private Const VK_CANCEL = &H3
Private Const VK_CAPITAL = &H14
Private Const VK_CLEAR = &HC
Private Const VK_CONTROL = &H11
Private Const VK_CRSEL = &HF7
Private Const VK_DECIMAL = &H6E
Private Const VK_DELETE = &H2E
Private Const VK_DIVIDE = &H6F
Private Const VK_DOWN = &H28
Private Const VK_END = &H23
Private Const VK_EREOF = &HF9
Private Const VK_ESCAPE = &H1B
Private Const VK_EXECUTE = &H2B
Private Const VK_EXSEL = &HF8
Private Const VK_F1 = &H70
Private Const VK_F10 = &H79
Private Const VK_F11 = &H7A
Private Const VK_F12 = &H7B
Private Const VK_F13 = &H7C
Private Const VK_F14 = &H7D
Private Const VK_F15 = &H7E
Private Const VK_F16 = &H7F
Private Const VK_F17 = &H80
Private Const VK_F18 = &H81
Private Const VK_F19 = &H82
Private Const VK_F2 = &H71
Private Const VK_F20 = &H83
Private Const VK_F21 = &H84
Private Const VK_F22 = &H85
Private Const VK_F23 = &H86
Private Const VK_F24 = &H87
Private Const VK_F3 = &H72
Private Const VK_F4 = &H73
Private Const VK_F5 = &H74
Private Const VK_F6 = &H75
Private Const VK_F7 = &H76
Private Const VK_F8 = &H77
Private Const VK_F9 = &H78
Private Const VK_HELP = &H2F
Private Const VK_HOME = &H24
Private Const VK_INSERT = &H2D
Private Const VK_LBUTTON = &H1
Private Const VK_LCONTROL = &HA2
Private Const VK_LEFT = &H25
Private Const VK_LMENU = &HA4
Private Const VK_LSHIFT = &HA0
Private Const VK_MBUTTON = &H4 ' NOT contiguous with L RBUTTON
Private Const VK_MENU = &H12
Private Const VK_MULTIPLY = &H6A
Private Const VK_NEXT = &H22
Private Const VK_NONAME = &HFC
Private Const VK_NUMLOCK = &H90
Private Const VK_NUMPAD0 = &H60
Private Const VK_NUMPAD1 = &H61
Private Const VK_NUMPAD2 = &H62
Private Const VK_NUMPAD3 = &H63
Private Const VK_NUMPAD4 = &H64
Private Const VK_NUMPAD5 = &H65
Private Const VK_NUMPAD6 = &H66
Private Const VK_NUMPAD7 = &H67
Private Const VK_NUMPAD8 = &H68
Private Const VK_NUMPAD9 = &H69
Private Const VK_OEM_CLEAR = &HFE
Private Const VK_PA1 = &HFD
Private Const VK_PAUSE = &H13
Private Const VK_PLAY = &HFA
Private Const VK_PRINT = &H2A
Private Const VK_PRIOR = &H21
Private Const VK_PROCESSKEY = &HE5
Private Const VK_RBUTTON = &H2
Private Const VK_RCONTROL = &HA3
Private Const VK_RETURN = &HD
Private Const VK_RIGHT = &H27
Private Const VK_RMENU = &HA5
Private Const VK_RSHIFT = &HA1
Private Const VK_SCROLL = &H91
Private Const VK_SELECT = &H29
Private Const VK_SEPARATOR = &H6C
Private Const VK_SHIFT = &H10
Private Const VK_SNAPSHOT = &H2C
Private Const VK_SPACE = &H20
Private Const VK_SUBTRACT = &H6D
Private Const VK_TAB = &H9
Private Const VK_UP = &H26
Private Const VK_ZOOM = &HFB


Эх, зря я тему завел... Нетути тут профессионалов... :(

Куков
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 04.05.2009 (Пн) 18:44
Откуда: Омск

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение Куков » 21.08.2009 (Пт) 12:35

[offtopic]Я б на твоем месте не стал раньше времени вопить, как потерпевший, ты что хочешь что б профы сидели целыми днями в онлайне и ждали когда к ним обратятся за помошью? Щас лето, кто то в отпусках, кто то на пикниках, кто то на работе, приходит домой уставший и ему явно не до тебя, вообщем могу посоветовать ждать, хотя после твоего "левого базара" я б помогать уже не стал, все таки взаимоуважение - великая вешь. [/offtopic]
Чикаго не мьюзикал
Не горд в сша
Это Омский поселок
тут вся наша родня...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Class VB для эмуляции нажатия клавиш мыщи и клавиатуры

Сообщение ANDLL » 21.08.2009 (Пт) 16:10

keybd_event
mouse_event
Там же в правилах написано какие темы можно а какие нельзя создавать, ты не читал "Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам"?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 18

    TopList  
cron