Вопрос № 118358: Доброго времени суток.
Подскажите пожалуста, как узнать какая раскладка клавиатуры выбранна в данный момент, в другой программе и как её изменить.
Если не составит труда можно и кусок кода.
Заранее благодарен....Вопрос № 118414: Здравствуйте, уважаемые эксперты.
вопрос такой: как в Delphi узнать системную настройку мыши, которая находится в "Панель управленияМышьКолесико". Имею в виду число, указанное в количестве строк прокрутки колесиком, установлена ли эта...
Вопрос № 118.358
Доброго времени суток.
Подскажите пожалуста, как узнать какая раскладка клавиатуры выбранна в данный момент, в другой программе и как её изменить.
Если не составит труда можно и кусок кода.
Заранее благодарен.
Отправлен: 14.01.2008, 06:44
Вопрос задал: Yark1n9 (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 6)
Отвечает: Raptor3
Здравствуйте, Yark1n9!
Button1Click - это узнаем текущую раскладку
LoadKeyboardLayout('00000409', KLF_ACTIVATE); // Английский язык
LoadKeyboardLayout('00000419',KLF_ACTIVATE);// Великий и могучий РУССКИЙ
Приложение:
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 4-ый класс)
Ответ отправлен: 14.01.2008, 06:56 Оценка за ответ: 3 Комментарий оценки: Это только для приложения в котором нажали кнопку, вопрос был задан как это сделать в другой программе.
Отвечает: Виктор Пырлик
Здравствуйте, Yark1n9!
Вот неплохая статья на этот счет.. довольно короткие и ясные примеры с кодом, реализовано всё что вы спрашиваете.
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 14.01.2008, 09:09 Оценка за ответ: 4 Комментарий оценки: Статья не плохая, а сами пробовали?
Не переключает раскладку с EN на RU, вернее переключает непонятно как: в панели значок переключается, а символы продолжают вводиться на английском. Что это может быть?
Отвечает: Denisss
Здравствуйте, Yark1n9!
Пример переключения раскладки в других приложениях прикреплен к ответу.
Также пример можно скачать здесь: ссылка (Файл будет удален через 1 месяц после последнего скачивания).
Принцип работы с примером:
1. Нажать кнопку "Список окон" -> список окон заполнится открытыми на данный момент окнами (данный список может оказаться не полным или избыточным, но основная задача примера не заключается в получении списка всех окон).
2. В списке окон выбрать имя тестируемого окна -> в списке раскладок должна выделиться установленная в выбранном приложении раскладка.
3. В списке раскладок выбрать раскладку -> в выбранном (в списке окон) окне должна смениться раскладка.
При запуске приложения, программа получает список установленных в системе раскладок (функция GetKeyboardLayoutList). Далее запоминается текущая раскладка приложения (GetKeyboardLayout с нулевым параметром).
По очереди устанавливаются раскладки (ActivateKeyboardLayout), полученные в списке и определяются их имена (GetKeyboardLayoutName) вида '00000409'. Русские (или др.) имена считываются из реестра.
Остальные комментарии можно найти в самом примере.
Удачи!
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ---- Ответ отправлен: 14.01.2008, 22:19 Оценка за ответ: 5
Отвечает: Genia007
Здравствуйте, Yark1n9!
Узнать раскладку клавиатуры в любом активном окне
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
//раскладка английская
else
//раскладка НЕанглийская, например 68748313 соответствует русской
Переключить раскладку можно так, пробовал только для текущей проги.
//На русский
procedure TForm1.Button1Click(Sender: TObject);
var
Layout: array[0.. KL_NAMELENGTH] of char;
begin
LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
end;
//На английский
procedure TForm1.Button2Click(Sender: TObject);
var
Layout: array[0.. KL_NAMELENGTH] of char;
begin
LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
end;
Ответ отправил: Genia007 (статус: 4-ый класс)
Ответ отправлен: 15.01.2008, 12:07
Вопрос № 118.414
Здравствуйте, уважаемые эксперты.
вопрос такой: как в Delphi узнать системную настройку мыши, которая находится в "Панель управленияМышьКолесико". Имею в виду число, указанное в количестве строк прокрутки колесиком, установлена ли эта опция или установлена опция "на один экран".
Попробуйте использовать подобную функцию, она возвращает число, указанное в количестве строк прокрутки колесиком:
function GetMouseScrLin: Integer;
begin
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0);
end;
Ответ отправил: Drbear (статус: 5-ый класс)
Ответ отправлен: 14.01.2008, 13:06 Оценка за ответ: 5 Комментарий оценки: Отлично работает, огромное спасибо. Добавлю лишь то, что эта функция возвращает -1 если стоит опция прокрутки по экранам.