Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по смене раскладки клавиатуры 
V
    Опции темы
_Dimon_
Дата 7.8.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Мне нужно в своей проге сделать надпись похожую на индикатор раскладки клавиатуры на панели задач. Как мне отловить переключение раскладки клавиатуры?
PM MAIL   Вверх
_hunter
Дата 7.8.2007, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



лови WM_INPUTLANGCHANGEREQUEST

Добавлено через 25 секунд
или WM_INPUTLANGCHANGE


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
jonie
Дата 7.8.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



я когда был зеленый ламер делал такую прожку)
делал банально - вешал таймер и по нему проверял состояние.

файл прикрепляю. напиано на masm 8.0 (вроде)
сильно за код просьба не бить 8)

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  ruslat_v002.rar 10,17 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
_Dimon_
Дата 10.8.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Написал такой код:
Код

void __fastcall TfForm::AppMessage(tagMSG &Msg, bool &Handled)
{
  Handled = false;

 if (Msg.message==WM_INPUTLANGCHANGEREQUEST)
 {
  char *A;
  GetKeyboardLayoutName(A);
  AnsiString L = StrPas(A);
  if (L=="10000409") ShowMessage("Eng");
 }
}



Возникло сразу два вопроса:

1. Как сделать чтоб результатом был не тот язык, которий был во время переключения, а тот на    
которий я переключился?

2. Почему код языка не "00000409", а "10000409" ?
 
PM MAIL   Вверх
586
Дата 10.8.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(_Dimon_ @  10.8.2007,  18:12 Найти цитируемый пост)
char *A;
  GetKeyboardLayoutName(A);

e-moe!!
char A[KL_NAMELENGTH];
PM   Вверх
_Dimon_
Дата 11.8.2007, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Я решил этот вопрос таким кодом:

 
Код

void __fastcall TfKusok::AppMessage(tagMSG &Msg, bool &Handled)
{

 if (Msg.message==WM_INPUTLANGCHANGEREQUEST)
 {
  DefWindowProc(fKusok->Handle,WM_INPUTLANGCHANGEREQUEST,0,0);
  char A[8];
  GetKeyboardLayoutName(A);
  AnsiString L = StrPas(A);
  //ShowMessage(L);
  if (L=="00000409") lLang->Caption = "ENG";
  if (L=="00000419") lLang->Caption = "РУС";
  if (L=="00000422") lLang->Caption = "УКР";
  Handled = true;
 }
 else Handled=false;
}



Есть ли сдесь ошибки (очень сильно не ругайте smile ) ?

Добавлено через 1 минуту и 54 секунды
Правильно ли я использую Handled ?
PM MAIL   Вверх
586
Дата 11.8.2007, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(_Dimon_ @  11.8.2007,  04:40 Найти цитируемый пост)
char A[8];

и снова буффера не хватит.  smile 
KL_NAMELENGTH = 9 а не 8. ЕСли уж делать, то так:
Код
void __fastcall TForm1::AppMessage(tagMSG &msg, bool &Handled)
{
  if(msg.message==WM_INPUTLANGCHANGEREQUEST)
  {
    switch(LOWORD(msg.lParam))
    {
    case 0x409: Caption="EN"; break;
    case 0x419: Caption="RU"; break;
    case 0x422: Caption="UK"; break;
    default: Caption="??"; break;
    }
  }
  Handled=false;
}

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  Application->OnMessage=AppMessage;
}

PM   Вверх
_Dimon_
Дата 11.8.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Спасибо 586, вопрс решен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.