Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Раскладка клавиатуры, Получение раскладки текущего окна 
V
    Опции темы
CaLaT
  Дата 20.3.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как получить раскладку клавиатуры именно текущего окна.

Есть пример от товарища Rouse_ , но на дельфи... у меня возникли сложности с переносом в си, кто может помогите плз

Код

procedure TfrmMain.Timer1Timer(Sender: TObject);
var
  FID: Cardinal;
begin
  FID := GetWindowThreadProcessId(GetForegroundWindow, nil);
  AttachThreadInput(GetCurrentThreadId, FID, True);
  Caption := IntToStr(GetKeyboardLayout(FID) and $FFFF);
  AttachThreadInput(GetCurrentThreadId, FID, False);  
end;


PM MAIL   Вверх
Earnest
Дата 20.3.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Какие тут могут быть сложности? Все эти АПИ-функции доступны и в C и ровно с такими же именами.


--------------------
...
PM   Вверх
CaLaT
Дата 20.3.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Переписал этот код так:

Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

  DWORD FID = GetWindowThreadProcessId(GetForegroundWindow, 0);
  AttachThreadInput(GetCurrentThreadId(), FID, True);
  Memo1->Lines->Add(PRIMARYLANGID(GetKeyboardLayout(FID)));
  AttachThreadInput(GetCurrentThreadId(), FID, False);
}


Но раскладка считывается с моего моего приложения, а не с активного... 

Help

Добавлено @ 19:07
2Earnest:
До меня просто долго доходило, что GetCurrentThreadId - это функция) И в си она пишется так -GetCurrentThreadId()  smile 

Это сообщение отредактировал(а) CaLaT - 20.3.2009, 19:16
PM MAIL   Вверх
GremlinProg
Дата 23.3.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



а ты не задумывался, что в момент вызова GetForegroundWindow, на переднем плане находится именно твое окно?
добавляй в мемо к PRIMARYLANGID еще и текст заголовка окна переднего плана, тогда и найдешь ошибку

ps: код рабочий, даже без присоединения к чужому потоку (без AttachThreadInput)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
CaLaT
Дата 23.3.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё, спасибо, нашёл ошибку)

Добавлено через 2 минуты и 27 секунд
кстати PRIMARYLANGID - удобный такой макрос)
PM MAIL   Вверх
jonie
Дата 24.3.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



может кому-то будет интересно.
писал когда-то давно (лет эээ.. 6-ть назад если не больше) инликатор раскладки клавиатуры на assembler (MASM x86)
в аттаче исходники. устанавается используя inf файл (правой->установить).
работает мега тупо (подробности в исходниках) и содержит, вероятно, много ошибок и "хакерских" мест. as is и всё такое. мб кому пригодится, а то у меня пропадет...

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


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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