Re: WinAPI Дізнатися розкладку клавіатури
Betterthanyou я написав бо незрозумів чому ти писав про це
я пояснював raxp чому я використовую проміжні змінні
У моєму коді взагалі немає проміжних змінних. Різницю відчуваєте?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → WinAPI Дізнатися розкладку клавіатури
Для відправлення відповіді ви повинні увійти або зареєструватися
Betterthanyou я написав бо незрозумів чому ти писав про це
я пояснював raxp чому я використовую проміжні змінні
У моєму коді взагалі немає проміжних змінних. Різницю відчуваєте?
А навiщо ви менi це пояснюэте? )
Наступне питання: для якого вікна ви намагаєтеся визначити розкладку? Ні, мова не про те яке поверх, а який - тип вікна. Так, є велика різниця. Наприклад для консольного вікна, причому чужого, не все так просто. В XP була недокументована функа GetConsoleLangId з kernel32. А починаючи з Vista слід використовувати - conhost.
Betterthanyou тримай повноцінний проект для відстеження розкладки(заміни тільки hWND на ForegroundWindow)
Додадкова інфа тут https://msdn.microsoft.com/ru-ru/librar … s.85).aspx
Betterthanyou тримай повноцінний проект для відстеження розкладки(заміни тільки hWND на ForegroundWindow)
Навіть ваш повноцінний проект для відстеження розкладки не справився як слід з завданням(нижче напишу чому) але проблему нарешті вирішено, ви у проекті використали macro LOWORD він якраз і нормально працює
А тепер скрін з проблемою
для якого вікна ви намагаєтеся визначити розкладку?
Звичайне віндовське вікно я тестував у Internet Explorer, провіднику, для роб. стола кругом однаковий результат
Як я писав раніше скорій за все це щось з моєю ОС
LoWord() виділяє з 32-бітового целочисельного значення молодше слово. У мене бралося старше, а молодше викидалось через >>. Тади нема проблем )
нижче напишу чому
...
Як я писав раніше скорій за все це щось з моєю ОС
за посиланням Юри і так ясно, в ОС є фішка з використанням головної мови при перемиканні розкладок. Тут ситуація як така розписана - http://antontitov.com/2010/02/06/keyboa … windows-7/
Betterthanyou коротше перепиши мою функцію ось так(так буде надійніше)
#define WM_UPDATEDATA WM_USER + 100
void CMfcHKLDlg::NotifyThread(PVOID param){
DWORD dwPID, dwTID;
char pszHKL[1024];
CMfcHKLDlg * pThis = NULL;
if( pThis = (CMfcHKLDlg *)param )
{
while( TRUE )
{
pThis->SendMessage(WM_UPDATEDATA, TRUE , 0);
dwTID = GetWindowThreadProcessId(pThis->m_hWnd, &dwPID);
pThis->m_HKL = (DWORD)GetKeyboardLayout(dwTID);
if( GetLocaleInfo(MAKELCID(((UINT)pThis->m_HKL & 0xffffffff), SORT_DEFAULT), LOCALE_SLANGUAGE, pszHKL, 1024) )
pThis->m_Info = pszHKL;
pThis->SendMessage(WM_UPDATEDATA, FALSE, 0);
Sleep(10);
}
}
}
Тут ситуація як така розписана - http://antontitov.com/2010/02/06/keyboa … in-windows
Я такого не робив, в мене кожна мова представлена як окрема
Betterthanyou коротше перепиши мою функцію ось так(так буде надійніше)
Так, допомогло
Betterthanyou тільки що перевірив на 10-ці х64, все добре
Для відправлення відповіді ви повинні увійти або зареєструватися