Давайте в качестве первого примера посмотрим, как программно можно изменить раскладку клавиатуры.
Когда это может нам пригодиться? Ну, представьте себе, что в нашей программе пользователь должен ввести некоторую информацию. Причем доподлинно известно, что эта информация должна быть на русском языке. В таком случае было бы удобно, если бы наша программа при загрузке сразу же установила бы русскую раскладку для клавиатуры.
Эту же функцию мы сможем использовать и для автоматического изменения раскладки на английскую (скажем в случае вызова диалогового окна для ввода электронного адреса).
Начнём нашу программу. Создайте простое приложение типа Standard EXE. Теперь нам надо как-то включить в него возможность использования API-функции. Для этого в составе Visual Studio предусмотрена специальная утилита API Text Viewer. Запустить эту утилиту можно двумя способами, и Вы можете выбрать любой из них.
Способ первый (запуск утилиты "API Text Viewer" из Windows). Нажимаем на кнопку "Пуск" на панели задач Windows, далее выбираем "Программы", далее Microsoft Visual Studio 6.0. В появившемся подменю выбираем "Microsoft Visual Studio 6.0 Tools" и в появившемся списке утилит щелкаем на "API Text Viewer".
Способ второй (запуск утилиты "API Text Viewer" из среды Visual Basic'а). Заходим в меню Add-Ins ("Надстройки") среды Visual Basic'а. В появившемся подменю выбираем "Add-In Manager…". Появляется диалоговое окно "Add-In Manager" (рис. 1).
В списке надстроек выбираем "VB 6 API Viewer" и отмечаем флажок "Loaded/Unloaded" (обратите внимание, что в строке "VB 6 API Viewer" появится слово Loaded (Загружен)). Закрываем диалоговое окно, нажав на кнопку OK. Теперь Вы можете использовать утилиту "API Text Viewer" прямо из среды Visual Basic'а.
Теперь для запуска утилиты "API Text Viewer" из среды Visual Basic'а зайдите в меню Add-Ins и выберете там пункт "API Viewer".
Если Вы хотите, чтобы определённая надстройка (и "API Text Viewer" в том числе) загружалась автоматически каждый раз при запуске Visual Basic'а, то в диалоговом окне "Add-In Manager" (рис. 1) поставьте галочку "Load on Startup".
Каким бы способом из предложенных Вы не воспользовались, на экране должно возникнуть окно утилиты "API Text Viewer" (рис. 2).
Для того, что бы воспользоваться её возможностями, Вы должны зайти в меню File и выбрать там подменю "Load Text File…". В появившемся диалоговом окне "Select a Text API File" выберете WIN32API.TXT. Именно в этом файле содержится информация об API-функциях. После выбора файла нажмите кнопку "Открыть".
Обратите внимание, что в ComboBox'е "API Type:" будет три элемента. Их назначение перечислено в следующей таблице: Элемент Назначение
Constants | Служит для описания констант, использующихся в API-функциях. |
Declares | Служит для описания объявлений API-функций. |
Types | Служит для описания типов данных, использующихся в API-функциях. |
Для того чтобы при следующих использованиях утилиты "API Text Viewer" она работала быстрее, конвертируйте загружаемый текстовый файл (т. е. файл с расширением *.txt) в файл формата Microsoft Access (т. е. файл с расширением *.mdb). Для этого просто зайдите в меню File и выберите пункт "Convert Text to Database…". В дальнейшем при открытии файла с нужными объявлениями в меню File Вы должны выбрать не "Load Text File…", а "Load Database File…".
Для того чтобы при открытии утилиты "API Text Viewer" сразу загружался нужный Вам файл (а чаще всего Вы будете использовать один и тот же файл), поставьте галочку в пункте "Load Last File" меню View.
Нам для нашей цели понадобятся одна API-функция и одна константа. Для вставки необходимой функции выберете в ComboBox'е "API Type:" тип Declares и в поле "Type the first few letters of the word you are looking for" ("Напечатайте несколько первых букв слова, которое Вы ищете") наберите несколько первых букв названия необходимой нам функции ActivateKeyboardLayout. Именно эта функция и отвечает за выбор той или иной раскладки клавиатуры. Либо Вы можете применить альтернативный способ - найти нужную функцию в списке "Available Items" (хотя его прокручивание дело не из приятных - уж больно он длинный).
После выбора необходимой нам функции любым способом перенесите её в либо двойным щелчком, либо нажатием на кнопке "Add" в нижний список "Selected Item" окна утилиты "API Viewer" (именно в нем и происходит "накапливание" всех необходимых нам функций, констант и структур для нашей программы).
Теперь добавим необходимую константу. Для этого в ComboBox'е "API Type:" выберете тип "Constants", и аналогичным предыдущему способом найдите и перенесите в нижний список "Selected Item" константу Private Const HKL_NEXT = 1.
При этом обратите внимание на переключатель "Declare Scope" в правой части утилиты "API Text Viewer". Хоть это и не имеет прямого отношения к использованию API-функций в программах на Visual Basic'е, всё же вспомните, что при размещении функций в коде формы Вы должны использовать модификатор Private (так что убедитесь, что выделено именно слово "Private" а не "Public"). Модификатор же "Public" используется в случае размещения необходимых функций в модуле.
После всех необходимых операций окно утилиты "API Text Viewer" должно выглядеть как на рисунке 3
Теперь запомните нужные объявления в буфере обмена, нажав на кнопку Copy в правой части утилиты. После этого закройте окно утилиты - оно нам больше в этом задании не понадобится.
Теперь добавьте находящиеся в буфере обмена объявления в окно кода нашего проекта. Для этого установите курсор после строки Option Explicit и нажмите Ctrl+V.
Всё! Теперь в нашей программе есть объявление всех необходимых API-функций и констант, и их в нашей программе можно использовать как обычные функции и константы Visual Basic'а.
Посмотрим, как это делается.
Добавьте на форму одну кнопку и измените её свойство Name на cmdToggleLanguage, а свойство Caption на "Изменение раскладки". В событие Click данной кнопки вставьте следующий код:
ActivateKeyboardLayout 0, HKL_NEXT
Что он делает? Просто переключает раскладку на следующую в списке (английскую на русскую, русскую на английскую).
Запустите Вашу программу и убедитесь, что при нажатии на кнопку раскладка будет меняться. Вот, собственно, и всё. Наша программа может сама изменять раскладку клавиатуры. Напомним ещё раз, что средствами стандартного Visual Basic'а этого сделать нельзя. А вот с использованием API-функций - можно, что и было продемонстрировано в нашем примере.
Эту функцию имеет смысл использовать только в Visual Basic'е. Что же до программирования в среде Office, то тут можно поступить значительно проще. Например, в Word'е надо написать что-то в таком духе:
Option Explicit Sub LanguageEnglish() Application.Keyboard msoLanguageIDEnglishUS End Sub Sub LanguageRussian() Application.Keyboard msoLanguageIDRussian End Sub
Первая процедура (LanguageEnglish) переведёт раскладку клавиатуры в английскую, а вторая (LanguageRussian) в русскую. При этом вы используете константы для соответствующих языков: msoLanguageIDEnglishUS - для американского английского и msoLanguageIDRussian - для русского.
Далее