Вход/Регистрация
Excel. Трюки и эффекты
вернуться

Гладкий Алексей Анатольевич

Шрифт:
...

Листинг 3.18.

Показываем меню Пуск

procedure TForm1.cmbStartClick(Sender: TObject);

begin

//Имитируем нажатие клавиши Windows

keybd_event(VK_LWIN, 0, 0, 0);

//Имитируем отпускание клавиши Windows

keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

end;

Нас интересуют, прежде всего, первый и третий параметры функции keybdevent (второй не используется, а третий предназначен для установки дополнительной информации, относящейся к нажатию клавиши). Первым параметром функции передается код «нажимаемой» или «отпускаемой» клавиши. Третий параметр равен нулю при «нажатии» и константе KEYEVENTF_KEYUP при «отпускании» клавиши.

...

Внимание!

При использовании keybd_event главное – не забывать «отпускать» программно нажатые клавиши (как это делается в приведенных здесь примерах). Иначе есть риск изрядных «г люков» клавиатурного ввода.

Аналогичный приведенному в листинге 3.18 пример программного нажатия клавиши Print Screen (снятия копии экрана) приводится в листинге 3.19.

...

Листинг 3.19.

Снятие копии экрана

procedure TForm1.cmbPrintScreenClick(Sender: TObject);

begin

//Нажимаем Print Screen

keybd_event(VK_SNAPSHOT, 0, 0, 0);

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);

end;

В листинге 3.20 приводится пример нажатия комбинации из нескольких клавиш (Windows+M для сворачивания всех окон).

...

Листинг 3.20.

Сворачивание всех окон

procedure TForm1.cmbMinimizeAllClick(Sender: TObject);

begin

//Нажимаем Windows+M

keybd_event(VK_LWIN, 0, 0, 0);

keybd_event(Byte(\'M\'), 0, 0, 0);

keybd_event(Byte(\'M\'), 0, KEYEVENTF_KEYUP, 0);

keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

end;

Добавление к этой комбинации клавиши Shift приведет к восстановлению первоначального состояния окон.

Последний пример иллюстрирует, как можно использовать программное нажатие клавиш для ускорения быстрого доступа к программам. Имеется в виду программное нажатие сочетаний клавиш, ассоциированных с ярлыками, расположенными на Рабочем столе или находящимися в меню Пуск. Допустим, на компьютере используется сочетание клавиш Ctrl+Alt+E для запуска Internet Explorer. Пример программного нажатия этой комбинации клавиш приведен в листинге 3.21.

...

Листинг 3.21.

Быстрый запуск программы

procedure TForm1.cmbEIxplorerClick(Sender: TObject);

begin

//Нажимаем комбинацию Ctrl+Alt+E

keybd_event(VK_CONTROL, 0, 0, 0);

keybd_event(VK_MENU, 0, 0, 0);

keybd_event(Byte(\'E\'), 0, 0, 0);

keybd_event(Byte(\'E\'), 0, KEYEVENTF_KEYUP, 0);

keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

end;

Последний пример особенно полезен для запуска сразу нескольких программ (для этого ярлыкам этих программ должны быть назначены сочетания клавиш).

«Бегущие огни» на клавиатуре

В завершение рассмотрим довольно забавный пример, так же, как и предыдущий, основанный на программном нажатии клавиш Caps Lock, Num Lock и ScroLL Lock. Как известно, этим клавишам соответствуют три лампочки (по крайней мере, на большинстве клавиатур). Суть примера состоит в последовательном включении/выключении упомянутых клавиш, которое автоматически сопровождается включением/выключением соответствующих лампочек.

Перед рассмотрением основных процедур примера приведем текст процедуры PressKey, которая далее используется практически на каждом шагу (листинг 3.22). Она имитирует нажатие одной клавиши с переданным кодом.

...

Листинг 3.22.

Нажатие одной клавиши

procedure PressKey(keyCode: Byte);

begin

keybd_event(keyCode, 0, 0, 0 );

keybd_event(keyCode, 0, KEYEVENTF_KEYUP, 0 );

end;

Запуск и остановка огней осуществляется при нажатии кнопки (помимо кнопки, на форме должно быть текстовое поле, в котором вводится интервал между сменой состояния огней, а также таймер со свойством Enabled, равным False) (листинг 3.23).

...

Листинг 3.23.

Запуск и остановка огней

var

initCaps, initNum, initScroll: Boolean; //Первоначальные

//состояния клавиш

curCaps, curNum, curScroll: Boolean; //Текущие состояния

//клавиш

procedure TForm1.cmbStartClick(Sender: TObject);

begin

if cmbStart.Caption = \'Старт\' then

begin

//Сохраняем первоначальные состояния клавиш

initCaps := (GetKeyState(VK_CAPITAL) and 1) <> 0;

initNum := (GetKeyState(VK_NUMLOCK) and 1) <> 0;

initScroll := (GetKeyState(VK_SCROLL) and 1) <> 0;

//Включаем только Caps Lock

if not initCaps then PressKey(VK_CAPITAL);

curCaps := True;

if initNum then PressKey(VK_NUMLOCK);

curNum := False;

if initScroll then PressKey(VK_SCROLL);

curScroll := False;

//Запускаем «бегущие огни»

Timer1.Interval := StrToInt(txtInterval.Text);

Timer1.Enabled := True;

cmbStart.Caption := \'Стоп\

end

else

begin

//Останавливаем «бегущие огни»

Timer1.Enabled := False;

cmbStart.Caption := \'Старт\

//Восстанавливаем первоначальные состояния клавиш

if initCaps <> curCaps then PressKey(VK_CAPITAL);

if initNum <> curNum then PressKey(VK_NUMLOCK);

if initScroll <> curScroll then PressKey(VK_SCROLL);

end;

end;

  • Читать дальше
  • 1
  • ...
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: