Изменение раскладки клавиатуры в чужом окне

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Fil
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 23.01.2006 (Пн) 14:17

Изменение раскладки клавиатуры в чужом окне

Сообщение Fil » 23.01.2006 (Пн) 14:50

Возник вопрос смены раскладки клавиатуры в приложении Word. Как это сделать. Стандартные апи - меняют только в своём окне. Может есть какая функция, которая меняет раскладку по хвнд. Переключение с помощью имитации нажатия на сочетания клавиш забинженных виндою не подходит.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.01.2006 (Пн) 15:08

Нет под рукой кода VB, но есть делфя... Тут пара советов.
1. Переключить раскладку клавиатуры:
Код: Выделить всё
//На русский
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;

2. Узнать текущую раскладку клавиатуры в любом активном окне.
Возвращает числовое значение соответственно установленной раскладке:

Код: Выделить всё
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
  //раскладка английская
else
  //раскладка НЕанглийская, например 68748313 соответствует русской

3. Отловить изменение раскладки клавиатуры:

Нужно ловить сообщение WM_INPUTLANGCHANGEREQUEST

или
Код: Выделить всё
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Layout: array [0.. KL_NAMELENGTH] of char;
begin
  GetKeyboardLayoutName(Layout);
  if Layout = '00000409' then
    label1.caption:='en'
  else
    label1.caption:='ru';
end;

Может пригодиться...
А я все практикую лечение травами...

Fil
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 23.01.2006 (Пн) 14:17

Сообщение Fil » 23.01.2006 (Пн) 15:17

Спасибо, буду пробовать

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.01.2006 (Пн) 15:21

Twister
И что, это меняет раскладку в чужом окне?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Fil
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 23.01.2006 (Пн) 14:17

Сообщение Fil » 23.01.2006 (Пн) 15:45

Не помогает! Это всё-таки одна из стандартных апи. И она работает только на свём процессе.

Fil
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 23.01.2006 (Пн) 14:17

Сообщение Fil » 23.01.2006 (Пн) 15:56

GSerg
Конечно не меняет, но попробовать стоило. Хотя я и возился с ActivateKeyboardLayout и GetKeyboardLayout. Эффект тот же (


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 171

    TopList