Иногда наступает момент, когда хочется отложить работу, забыть о базах данных и немного поразвлечься. Один из способов это сделать подшутить над любимым начальником или, по крайней мере, над кем-нибудь за соседним компьютером. В Интернете можно найти множество таких «шуточных» программок, но ведь настоящие программисты пишут такие программы сами. В функциях Windows API заложено достаточно много возможностей для реализации чувства юмора программистов. Предлагаю вам ознакомиться с некоторыми из них.
Получение и изменение координат курсора.
Для получения координат курсора используется функция:
В переменных LpPoint.x и lpPoint.y функция возвращает текущие координаты курсора относительно экрана. Во время ее вызова ваша программа необязательно должна иметь фокус ввода. Достаточно вызвать эту функцию в обработчике событий таймера, узнавать о положении курсора в независимости от того, с какой программой на данный момент работает пользователь. Это показано в Примере 1.
Для изменения координат курсора используется функция:
Как и предыдущая, эта функция позволяет управлять курсором в независимости от того, какая программа активна. Используя эти две функции, можно сделать простую программу, которая будет записывать положение курсора, а затем воспроизводить его, как это показано в Примере 2.
А вот в этой программке показано, как сделать курсор движущимся в противоположную сторону.
Обратите внимание, что откомпилированная программа занимает 18 Кб. Это связано с тем, что в программе не используется модуль Forms, и вместо стандартных для Delphi screen.width и screen.height используется вызов функций API GetSystemMetrics(SM_CXSCREEN) и GetSystemMetrics(SM_CYSCREEN).
Получение информации о состоянии клавиши.
О состоянии клавиши на клавиатуре или мышке мы можем узнать из функции
Вот несколько строчек, наглядно демонстрирующих использование этой функции:
Существует еще одна функция GetAsyncKeyState, позволяющая определить состояние кнопок. Отличается она тем, что позволяет узнать, была ли нажата нужная клавиша с момента последнего вызова этой функции. К сожалению, эта функция не работает, если клавиша была нажата вне фокуса ввода приложения. С использованием этих функций вы сможете познакомиться в Примере 4.
Имитация нажатия пользователем клавиш.
А теперь самое интересное. Оказывается, в Windows есть функции, позволяющие имитировать нажатие пользователем клавиш:
Начиная с Windows 98 и Windows NT 4.0 SP3, Microsoft рекомендует использовать функцию:
Посмотрите внимательно на приведенный ниже фрагмент программы. Процедура TypeWords позволяет добиться эффекта имитации работы пользователя на клавиатуре:
Обратите внимание на то, что для набора букв в верхнем регистре необходимо нажать клавишу Shift. Точно так же следует поступать, если вам необходимо набрать комбинацию клавиш с нажатой кнопкой Ctrl. В Примере 5 показано использование этой процедуры для работы с мышкой.
Надеюсь, что приведенные функции позволят вам в полной мере проявить фантазию, как при создании шуточных программ, так и для написания демонстрационного учебника к ваше программе.