Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Раскладка клавиатуры Добавлено: 27.02.04 15:14  

Автор вопроса:  Chill | ICQ: 554200 

Как узнать раскладку клавиатуры для активного окна?

Т.е. мне надо, чтобы моя программа умела определять какая раскладка у окна стороннего приложения...

Смотрел пример в библиотеке кодов, но он работает только для текущего приложения...

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Chill



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #1 Добавлено: 28.02.04 11:40

Это почему на такой вопрос никто так и не смог ответить?

Вот написал функцию на си++...

//==========================================

HKL GetKbdLayout()

{

//УЗНАЕМ РАСКЛАДКУ КЛАВИАТУРЫ

//GetKeyboardLayout - Возвращаемые значения

//Величина возвращаемого значения - дескриптор раскладки символов на клавиатуре

//для потока. Младшее слово содержит идентификатор региона, идентифицирующий

//язык ввода, а старшее слово содержит дескриптор устройства, идентифицирующий

//физическую раскладку клавиатуры.

//1. узнаем hwnd активного окна

HWND hwndActive = GetForegroundWindow();

if(!hwndActive)

{return 0;}

//2. узнаем поток текущего окна

DWORD threadId = GetWindowThreadProcessId(hwndActive,NULL);

if(!threadId)

{return 0;}

//3. получаем активную раскладку клавиатуры для заданного потока

HKL kbdLayout = GetKeyboardLayout(threadId);

if(!kbdLayout)

{return 0;}

return kbdLayout;

}

//============================================

и еще, для определения раскладки надо сделать так

PRIMARYLANGID(HKL);

//вот так этот макрос определен в winnt.h

//#define PRIMARYLANGID(lgid) ((WORD )(lgid) & 0x3ff)

//макрос PRIMARYLANGID(HKL) возвращает language identifier

//например LANG_ENGLISH = 0х9, LANG_RUSSIAN = = 0х19

Думаю перевод данного кода на vb не вызовет затруднений...

Может напишу и вышлю в примеры, если это кому-то вообще нужно =)

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 28.02.04 12:03

Напиши, лишним не будет.

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 29.02.04 02:00

Я пользуюсь одной строкой:

Rez = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам