GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))
Кстати, да. Столкнулся с тем же самым.phantomstealth писал(а):Извиняюсь, может быть не мой топик, но у меня похожая проблема, мой прога, не может определить какая раскладка включена в Internet Explorer 7. Там оказывается две раскладки одна для адресной строки ее она и считывает, обычно она английская, а ту раскладку, что внутри окна, я не могу считать. Никто не подскажет как это сделать иначе?
aigorv писал(а):значит выход должен быть. Никто не знает?
Только непонятно, окно какого из них сейчас активно. Где клавиши жмут.Денис писал(а):Перебирать оба процесса iexplore напрямую и вытягивать из них GetKeyboardLayout поочередно и смотреть.
Нигде в похожих темах похожую задачу не решили.
Денис писал(а):Значит надо явно вытягивать хендл процесса и работать с ним.
arthur2 писал(а):поиск окна с кареткой (и ещё, кстати, многими вкусностями) решается функцией GetGUIThreadInfo
Нет, не правильно. Раскладка специфична для потока. Если создать два окна в двух разных потоках, то и раскладки в них будут различными. Именно эту картину мы и можем лицезреть в IE, вплоть до последних версий.У одного процесса две раскладки (для разных окон) быть не может. Я правильно понимаю?
arthur2 писал(а):Ноль передавай
Twister писал(а):Нет, не правильно. Раскладка специфична для потока. Если создать два окна в двух разных потоках, то и раскладки в них будут различными. Именно эту картину мы и можем лицезреть в IE, вплоть до последних версий.У одного процесса две раскладки (для разных окон) быть не может. Я правильно понимаю?
Если это так, то почему в GetKeyboardLayout передается TID, а не PID?Нет. Раскладка специфично именно для процесса
http://msdn.microsoft.com/en-us/library/ms646296(VS.85).aspx писал(а):Retrieves the active input locale identifier (formerly called the keyboard layout) for the specified thread
http://msdn.microsoft.com/en-us/library/ms646296(VS.85).aspx писал(а):The return value is the input locale identifier for the thread
aigorv писал(а):Непонятно тогда, зачем в IE запускается два процесса.
alibek писал(а):aigorv писал(а):Непонятно тогда, зачем в IE запускается два процесса.
Первый процесс — диспетчер.
Второй и последующие — непосредственно браузеры во вкладках.
Чёрт побери, я уже даже текст из msdn привёл, а человек все сотрясает воздух. Если не верите msdn, может поверите своим глазам?Получается, что раскладка специфична все-таки для процесса
Не туда обращаетесь, не там ищете Малость поуниверсалил предыдущий пример, сделал всё покрасивше. Готовое решение этого годового топика.Собственно, вся задача сводится к тому, чтобы найти контрол, имеющий фокус ввода. Активный контрол, расположенный на фореграунд виндоус.
Погуглив интернет понял, что задача нерешаемая. Нигде в похожих темах похожую задачу не решили.
Twister писал(а):Готовое решение этого годового топика.
Ну, никто и не спорит, что ключ к решению проблемы - функция GetGUIThreadInfo. Но ты же сам видишь, что некоторые под немного неверным углом смотрели на задачу, точнее на нюансы её решения. И если бы некоторые продолжали думать, что раскладка специфична для процесса, то верное решение выдали бы не скоро.arthur2 писал(а):А по-моему, готовое решение - в двух моих ответах
В контексте задачи - нам нужно узнать раскладку у активного окна, то есть как раз у текущего потока, или нет?Twister писал(а):а нафига нам только текущий поток? Нам нужно универсальное решение.
Twister писал(а):Ну, никто и не спорит, что ключ к решению проблемы - функция GetGUIThreadInfo
arthur2 писал(а):В контексте задачи - нам нужно узнать раскладку у активного окна, то есть как раз у текущего потока, или нет?
Что-то куда-то ты не туда полез. Нам абсолютно неважно в каком окне получать раскладку, неважно - активное оно или нет. Зная нужный hWnd, мы всегда сможем получить ID потока, к которому оно принадлежит и воспользоваться GetGUIThreadInfo. Воспользовавшись ею, мы узнаем hWnd окна, имеющего фокус ввода и оно НЕ ОБЯЗАТЕЛЬНО будет принадлежать этому же потоку. Т.е. подчёркнутое мной выражение в твоей цитате в корне неверно.arthur2 писал(а):Если же мы пытаемся-таки получить универсальное решение и узнать раскладку в программе, которая без фокуса, то GetGUIThreadInfo нам ничем не поможет. Для неё нам нужен тид, а если тид известен, то она сама нам уже и не нужна.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55