HowToDoIt - Емулятор «миші»
- DSР (15)
- Нейронні мережі (1)
- Цифрова обробка аудіо (14)
Хмара рубрик
Знайшли помилку на сторінці?
Виділіть помилку та натисніть

Емулятор «миші»
Вступ
Одного разу під час роботи на старому комп'ютері я зіткнувся з проблемою. USB порт був зламаний, а миша PS/2 була відсутня. Я вирішив написати просту програму, яка б могла замінити мені відсутній пристрій.
Переходимо до справи
Розробка "віртуальної миші" полягає в наступному. Перш за все, необхідно вибрати та призначити клавіші для відповідних дій миші. Після тривалих роздумів було обрано такі команди-клавіші:
- переміщення покажчик вліво(NUM4);
- перемістити вказівник праворуч(NUM6);
- перемістити вказівник вгору(NUM8);
- перемістити покажчик вниз(NUM5);
- клацнути лівою кнопкою миші(NUM7);
- клацнути правою кнопкою миші(NUM9).
Вихідний код цих призначень виглядає так:
Далі нам необхідно призначити клавішу (це може бути і комбінація клавіш), якою можна контролювати стан включення або відключення «віртуальної миші». У коді ми прописуємо наступне:
Наступними діями є:
- створення функції обробки натиснутих клавіш;
- запуск "хука" з "головної" функції main();
Що це таке цей хук? Хук – це механізм, за допомогою якого програми можутьперехоплювати події, такі як повідомлення, дії миші та натискання клавіш. Функції, що перехоплюють події певного типу, відомі як "хукові" процедури. Процедура, що підключається, може обробляти подію, яку вона отримує, а потім змінювати або скасовувати її [1]. Для старту клавіатурного хука необхідно написати функцію зворотного виклику (callback), яка буде викликатись та оброблятися при натисканні на кнопку. Функція зворотного дзвінка:
Тут функція CheckKey(…) є обробником команд, що надійшли з клавіатури. Зміст (кістяк) цієї функції представлений нижче:
Можна запустити хук із «головної» функції:
Докладніше про функцію SetWindowsHookEx(…) можна отримати з [2].
Переважно використовувати методику визначення кроку для переміщення курсору в залежності від того, тривало або коротко натиснута кнопка на клавіатурі. Наступна функція відповідає за цю ідею:
Тут, speedMax є змінною визначальною максимальним кроком (40 пікселів) переміщення курсору при тривалому натисканні клавіатурної клавіші. Значення dt характеризує різницю у часі між двома натисканнями однієї й тієї ж кнопки (тривале натискання кнопки розглядається як багаторазове).