Възможно ли е програма да изпраща натискания на клавиши или съобщения до Windows 7 (операционната система, на която работи), за да симулира ефекта от физическото натискане на потребител на клавиша Windows на клавиатурата, например; в C++, използвайки Windows API?
Как да изпращате натискания на клавиши/съобщения до Windows 7 с C++ и Windows API?
Отговори (3)
Функцията SendInput е на разположение от векове и трябва да прави точно това, от което се нуждаете.
Начинаещите често се опитват да изпратят ключове на Windows, защото смятат, че това е най-лесното решение. Със сигурност е лесно да се отговори, като се каже, че е възможно. Често, след като разработчикът инвестира значително време, става сложно. Една от причините да е сложно е, че трябва да се уверите, че контролата (текстовото поле или каквото и да е друго) има фокус. След това трябва да направите нещо, за да обработите данните, например да натиснете бутон. Може да се наложи да прочетете прозореца, за да решите какво да правите по-нататък.
Алтернатива е да преминете ниво нагоре и да се опитате да контролирате приложение чрез достъп до контролите и техния родител (прозорец). С други думи, можете да поставите данни в текстово поле директно като низ, а не чрез въвеждане на ключове в него. Можете да изпратите уведомително съобщение BN_CLICKED до wndow, вместо да изпратите клавиш за въвеждане на бутона, за да щракнете върху бутона. Трябва да потърсите начини да направите този тип неща. Напълно е възможно.
Запознайте се със Spy++; това е инструмент, който наистина може да ви помогне да изследвате контролите, прозорците и други подобни.
Можете да направите всяко симулирано въвеждане, като използвате SendInput обаче вие сте обвързани от нивото на интегритет на приложението (т.е. не можете да инжектирате въвеждане в приложения, които имат по-високо ниво от вашето).