Есть некое приложение. В нем необходимо нажать правый энтер (который под блоком NUM клавиш. Нашел в таблице только VK_Return, а вот для другого энтера не нашел. Кто ни будь может подсказать его VK код. Эта программа различает оба Энтера.
Они для нее разные.
П.с. Кликнуть мышкой не выйдет.
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
Регистрация: 13.07.2012
Сообщений: 6,471
У WM_KEYUP/WM_KEYDOWN сообщения, из которого приходит VK код, есть параметр LPARAM в котором содержатся разные флаги, в том число скан код клавиш. VK код один и тот же но скан код будет отличаться. Кроме того, там есть бит «extended key» на который тоже стои обратить внимание (даже думаю с него надо начать)
Пользователь
Регистрация: 27.02.2009
Сообщений: 53
А есть ли какая книжка умная по данной теме, а то из МСДН справки почти не понял как применяется лпарам
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
Пользователь
Регистрация: 27.02.2009
Сообщений: 53
ГОРЯЧИЕ КЛАВИШИ / HotKeys / Visual Studio Code
http://ru.wikipedia.org/wiki/Scancode нашел скан коды для клавишь, но блин нислова, как ими пользоваться ><. Понятно что прописывать в Lparam а что прописывать не знаю. Пните кто ни будь, пожалуйста
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
Регистрация: 13.07.2012
Сообщений: 6,471
Из LPARAM извлекаете сканкод и потом сравниваете. В MSDN написано в каких битах LPARAM указан сканкод
Регистрация: 15.02.2010
Сообщений: 15,414
Пользователь
Регистрация: 27.02.2009
Сообщений: 53
Осталось добавить нажатие Num-enter. С ним то как раз и проблемы. Точнее проблема в отсутсвии примера или норм описания. С английским проблемки пока. Ну вот что сейчас есть
// Имитация нажатия клавиш для входа в Управляющую систему sleep(2000); Label2.Caption:=’Запуск управляющей систмы’; h:=findwindow(nil,’Launch EMCO Control’); PostMessage(h, WM_KEYDOWN, VK_DOWN, 0); PostMessage(h, WM_KEYup, VK_DOWN, 0); Sleep(1000); Label2.Caption:=’Выбор управляющей систмы’; PostMessage(h, WM_KEYDOWN, VK_Return, 0); PostMessage(h, WM_KEYup, VK_Return, 0); sleep(2000); Label2.Caption:=’Загрузка управляющей систмы’ ; f:=findwindow(‘NC2000 (c) EMCO’,’WinNC SINUMERIK 840D TURN (c) Emco’); Sleep(2000); keybd_event(VK_F10, 0, 0, 0); Keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0); Sleep(2000); keybd_event(VK_F3, 0, 0, 0); Keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); Sleep(1000); keybd_event(Vk_Return ,28, 0, 0); Keybd_event(Vk_Return, 156, KEYEVENTF_KEYUP, 0); Sleep(2000); keybd_event(VK_LSHIFT , 0, 0, 0); keybd_event(VK_f7 , 0, 0, 0); Keybd_event(VK_f7, 0, KEYEVENTF_KEYUP, 0); Keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0); Sleep(2000); keybd_event(VK_F10 , 0, 0, 0); Keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0); sleep(1000) ; keybd_event(VK_F1 , 0, 0, 0); Keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); Sleep(2000); keybd_event(VK_F10 , 0, 0, 0); Keybd_event(VK_F10, 0, KEYEVENTF_KEYUP, 0); sleep(1000); keybd_event(VK_LSHIFT , 0, 0, 0); sleep(1000); keybd_event(VK_F1 , 0, 0, 0); Keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); sleep(1000); Keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0); Sleep(2000); Sleep(1000); keybd_event(VK_Return , 0, 0, 0); Keybd_event(VK_Return, 0, KEYEVENTF_KEYUP, 0); Sleep(2000);
Наклепал программку для определения скан кода нужной мне клавиши. Программулина выдала что скан код равен E0_1C. Я так понимаю, что его нужно вставить вот в эту конструкцию
Как узнать виртуальные коды клавиш | sc vk
keybd_event(VK_Return , 0, 0, 0); за место второго нуля. Как я не шаманил, ничего не выходит. На прямую он не вставляется, т.к. он в 16-ой системе и делфи посылает меня подальше. Я вообще не могу понять, это же по-идее сложный скан-код (состоящий из двух). Может их по отдельности посылать надо.
Может кто помочь с Русской документацией, или угостить примерчиком?
П.С. зашел на кафедру программирования в технический универ, начал спрашивать про скан коды, преподы посмотрели на меня как на идиота и сказали что вообще ничего не знают про данные вещи.
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
Источник: www.programmersforum.ru
Ввод с клавиатуры
При работе с клавиатурой в GameMaker у вас есть множество функций, которые можно использовать для распознавания различных состояний клавиатуры, например, нажатой или отпущенной. Есть и такие, которые сохраняют все нажатия клавиш в виде строки или могут сообщить вам, какой была последняя нажатая клавиша, а также другие, позволяющие полностью очистить состояние клавиатуры.
ПРИМЕЧАНИЕ Эти функции предназначены только для настольных платформ Windows/Mac/Ubuntu. Вы можете обнаружить, что некоторые встроенные переменные и константы не действуют на других платформах, а многие функции не будут работать на мобильных устройствах.
Каждый символ ввода с клавиши (или нескольких клавиш) определяется его кодом UTF8, который представляет собой числовое значение. Это значение может быть получено для любого символа с помощью функции ord() но в GameMaker также есть серия constants для наиболее используемых специальных клавиш клавиатуры и специальных функций. Обычно вы используете комбинацию ord() с функциями keyboard_check*() , примерно так:
if keyboard_check(ord(«A»))
hspeed = -5;
>
Таким образом, приведенная выше функция проверит клавишу «A» и, если она нажата, то установит горизонтальную скорость объекта на -5. Обратите внимание, что использование ord() таким образом будет работать правильно только в том случае, если входная строка имеет длину всего один символ и представляет собой число от 0 до 9 или заглавный римский символ от A до Z. Функция ord() вернет полное значение UTF8, а функции keyboard_check*() определят только A — Z и 0 — 9. Но что, если вы хотите использовать клавиши со стрелками? Или если вы хотите изменить действие с помощью клавиши «shift»? Для этого в GameMaker есть серия констант vk_ ( vk_ означает виртуальную клавишу), которые можно использовать вместо ord() :
vk_nokey | код клавиши, означающий, что ни одна клавиша не нажата |
vk_anykey | код клавиши, представляющий нажатие любой клавиши |
vk_left | код клавиши для клавиши со стрелкой влево |
vk_right | код клавиши для клавиши со стрелкой вправо |
vk_up | код клавиши для клавиши со стрелкой вверх |
vk_down | код клавиши для клавиши со стрелкой вниз |
vk_enter | клавиша ввода |
vk_escape | клавиша эвакуации |
vk_space | клавиша пробела |
vk_shift | любая из клавиш shift |
vk_control | одна из клавиш управления |
vk_alt | клавиша alt |
vk_backspace | клавиша обратного хода |
vk_tab | клавиша табуляции |
vk_home | главный ключ |
vk_end | конечный ключ |
vk_delete | клавиша удаления |
vk_insert | клавиша вставки |
vk_pageup | клавиша перехода на страницу |
vk_pagedown | клавиша вызова |
vk_pause | клавиша паузы/прерывания |
vk_printscreen | клавиша printscreen/sysrq |
vk_f1 . vk_f12 | код клавиш для функциональных клавиш F1 — F12 |
vk_numpad0 . vk_numpad9 | цифровые клавиши на цифровой клавиатуре |
vk_multiply | клавиша умножения на цифровой клавиатуре |
vk_divide | клавиша деления на цифровой клавиатуре |
vk_add | клавиша добавления на цифровой клавиатуре |
vk_subtract | клавиша вычитания на цифровой клавиатуре |
vk_decimal | клавиши с десятичными точками на цифровой клавиатуре |
Следующие константы можно использовать только с keyboard_check_direct() :
vk_lshift | клавиша левого сдвига |
vk_lcontrol | левая клавиша управления |
vk_lalt | левая клавиша alt |
vk_rshift | правая клавиша переключения |
vk_rcontrol | правая клавиша управления |
vk_ralt | правая клавиша alt |
Ниже приведен небольшой пример того, как можно использовать vk_ константы:
if keyboard_check_pressed(vk_tab)
instance_create_layer(x, y, «Controllers», obj_Menu);
>
Приведенный выше код определит, нажата ли клавиша «Tab», и создаст экземпляр объекта «obj_Menu», если да.
Если вам нужно проверить наличие ключевого символа, который не является 0 — 9, A — Z или одной из констант VK, то вам следует проверить одну из переменных keyboard_* , например, keyboard_lastchar :
var _key = keyboard_lastchar;
if ord(_key) == ord(«ç»)
show_debug_message(«ç key pressed»);
>
При работе с клавиатурой доступны следующие функции:
ПРИМЕЧАНИЕ: Эти функции не будут работать при использовании экранной виртуальной клавиатуры.
- io_clear
- keyboard_check
- keyboard_check_pressed
- keyboard_check_released
- keyboard_check_direct
- keyboard_clear
- keyboard_set_map
- keyboard_get_map
- keyboard_unset_map
- keyboard_set_numlock
- keyboard_get_numlock
Есть также некоторые функции, которые можно использовать для имитации нажатия клавиш:
- keyboard_key_press
- keyboard_key_release
Наконец, следующие переменные встроены в GameMaker и могут быть доступны для получения информации о состоянии клавиатуры и вводимых данных:
ПРИМЕЧАНИЕ: При использовании виртуальной клавиатуры только переменная keyboard_string будет обновляться при вводе с клавиатуры.
- keyboard_key
- keyboard_lastkey
- keyboard_lastchar
- keyboard_string
Источник: manual-ru.yoyogames.com
Коды клавиш клавиатуры
Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :
Клавиша
Дес.
число
Шест.
число
Символическое
имя
Сравнение по
функции ord
Правая клавиатура при выключенной клавише NumLock:
Клавиша
Дес.
число
Шест.
число
Символическое
имя
Источник: android-tools.ru