HowToDoIt - Емулатор на мишката
- DSP (15)
- Невронни мрежи (1)
- Цифрова аудио обработка (14)
рубрика облак
Открихте грешка на страницата?
Маркирайте грешката и щракнете

Емулатор на мишката
Въведение
Един ден, докато работех на стар компютър, се натъкнах на проблем. USB портът беше повреден и PS/2 мишката липсваше. Реших да напиша проста програма, която да замени липсващото ми устройство.
Да се заемем с работата
Разработката на "виртуална мишка" е следната. Първо, трябва да изберете и зададете клавиши за съответните действия с мишката. След дълго обсъждане бяха избрани следните ключови команди:
- преместете показалеца наляво(NUM4);
- преместете показалеца надясно(NUM6);
- преместете показалеца нагоре(NUM8);
- преместете показалеца надолу(NUM5);
- щракнете с левия бутон(NUM7);
- щракнете с десния бутон върху(NUM9).
Изходният код за тези задания е както следва:
След това трябва да зададем клавиш (може да бъде комбинация от клавиши), който може да контролира включеното или изключеното състояние на "виртуалната мишка". В кода пишем следното:
Следващите стъпки са:
- създаване на функция за обработка на натиснати клавиши;
- стартиране на "кука" от "главната" функция main();
Каква е тази кука? Куката е механизъм, чрез който приложенията могатприхващане на събития като съобщения, действия с мишката и натискания на клавиши. Функциите, които прихващат събития от определен тип, са известни като процедури "кука". Hook процедура може да обработи събитие, което получава, и след това да го промени или отмени [1]. За да стартирате кука на клавиатурата, трябва да напишете функция за обратно извикване, която ще бъде извикана и обработена при щракване върху бутона. функция за обратно извикване:
Тук функцията CheckKey(...) е манипулатор за команди, получени от клавиатурата. Съдържанието (скелетът) на тази функция е представено по-долу:
Можете да стартирате куката от функцията "main":
За повече информация относно функцията SetWindowsHookEx(…) вижте [2].
За предпочитане е да използвате техника за откриване на стъпки, за да преместите курсора в зависимост от това дали бутон на клавиатурата е натиснат дълго или кратко. Следната функция е отговорна за тази идея:
Тук speedMax е променлива, която определя най-голямата стъпка (40 пиксела) за преместване на курсора при продължително натискане на клавиша на клавиатурата. Стойността dt характеризира разликата във времето между две натискания на един и същ клавиш (продължителното натискане на клавиш се третира като многократно).