Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 08.07.13 14:35
Оценка:
Подскажите как на C# отловить событие смены активного окна ввода или еще лучше
смены раскладки клавиатуры или смены указателя языка на яз. панели (типа RU на EN)

Нужно для драйвера клавиатуры. Если можно уточнить детали, опыт небольшой.
Сам найти не смог.
Re: Событие смены раскладки клавиатуры?
От: Nikolay_Ch Россия  
Дата: 08.07.13 14:46
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Подскажите как на C# отловить событие смены активного окна ввода или еще лучше

AVA>смены раскладки клавиатуры или смены указателя языка на яз. панели (типа RU на EN)
WinForms, WPF?
Вот здесь про WPF... Там есть событие InputLanguageChanged
Re[2]: Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 08.07.13 15:11
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>WinForms, WPF?

N_C>Вот здесь про WPF... Там есть событие InputLanguageChanged

К сожалению WinForms.
Класс InputLanguageManager не понимает
Пространство имен: System.Windows.Input
Сборка: PresentationCore (в PresentationCore.dll)
Re[3]: Событие смены раскладки клавиатуры?
От: vit_as Россия  
Дата: 08.07.13 16:17
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Здравствуйте, Nikolay_Ch, Вы писали:


N_C>>WinForms, WPF?

N_C>>Вот здесь про WPF... Там есть событие InputLanguageChanged

AVA>К сожалению WinForms.

AVA>Класс InputLanguageManager не понимает
AVA>Пространство имен: System.Windows.Input
AVA>Сборка: PresentationCore (в PresentationCore.dll)

Здесь
Re[3]: Событие смены раскладки клавиатуры?
От: koodeer  
Дата: 08.07.13 20:58
Оценка:
Здравствуйте, AVALAH, Вы писали:

N_C>>Вот здесь про WPF... Там есть событие InputLanguageChanged


AVA>К сожалению WinForms.


Ну, в WinForms тоже есть событие InputLanguageChanged.
Re: Событие смены раскладки клавиатуры?
От: koodeer  
Дата: 08.07.13 20:59
Оценка:
Здравствуйте, AVALAH.

Посмотри эту статью: Многоликий класс CultureInfo.
Re[4]: Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 09.07.13 03:19
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Ну, в WinForms тоже есть событие InputLanguageChanged.


Form.InputLanguageChanged событие родительской формы, мне не подходит нужно отследить глобальную смену раскладки в системе (или смену активного окна с другой раскладкой)
Re[5]: Событие смены раскладки клавиатуры?
От: Nikolay_Ch Россия  
Дата: 09.07.13 06:22
Оценка:
Здравствуйте, AVALAH, Вы писали:
AVA>Form.InputLanguageChanged событие родительской формы, мне не подходит нужно отследить глобальную смену раскладки в системе (или смену активного окна с другой раскладкой)
Что есть "глобальная смена раскладки"? Изменение настроек системы по добавлению/удалению раскладок? Потому, как у каждого окна в системе раскладка установлена независимо — при переключениями между окнами раскладка меняется.
Re: Событие смены раскладки клавиатуры?
От: okman Беларусь https://searchinform.ru/
Дата: 09.07.13 06:42
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Подскажите как на C# отловить событие смены активного окна ввода или еще лучше

AVA>смены раскладки клавиатуры или смены указателя языка на яз. панели (типа RU на EN)

AVA>Нужно для драйвера клавиатуры. Если можно уточнить детали, опыт небольшой.

AVA>Сам найти не смог.

10 НАЙТИ ОКНО, ИМЕЮЩЕЕ ФОКУС ВВОДА
20 УЗНАТЬ ЕГО РАСКЛАДКУ
30 СРАВНИТЬ С РАСКЛАДКОЙ, ПОЛУЧЕННОЙ В ПРОШЛЫЙ РАЗ
40 ПАУЗА
50 GOTO 10


Сомневаюсь, что есть что-то получше. Разве что оконные хуки, но они могут привести к
деградации системы, к тому же будут проблемы с UAC.
Re[2]: Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 09.07.13 11:06
Оценка:
Здравствуйте, okman, Вы писали:


O>
O>10 НАЙТИ ОКНО, ИМЕЮЩЕЕ ФОКУС ВВОДА
O>20 УЗНАТЬ ЕГО РАСКЛАДКУ
O>30 СРАВНИТЬ С РАСКЛАДКОЙ, ПОЛУЧЕННОЙ В ПРОШЛЫЙ РАЗ
O>40 ПАУЗА
O>50 GOTO 10
O>


O>Сомневаюсь, что есть что-то получше. Разве что оконные хуки, но они могут привести к

O>деградации системы, к тому же будут проблемы с UAC.

Да это самый простой и тупой метод, по таймеру проверять текущую раскладку активной формы с фокусом ввода и типа генерировать свое событие.
Но если учитывать что это драйвер и постоянный цикл будет жрать хоть и небольшой ресурс, как то себя перестаешь уважать.

Если оставить смену раскладки, должно же быть событие смены активного окна на системном уровне???
Неужели все так грустно, и защищено в С#???
Re[6]: Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 09.07.13 11:16
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Здравствуйте, AVALAH, Вы писали:

AVA>>Form.InputLanguageChanged событие родительской формы, мне не подходит нужно отследить глобальную смену раскладки в системе (или смену активного окна с другой раскладкой)
N_C>Что есть "глобальная смена раскладки"? Изменение настроек системы по добавлению/удалению раскладок? Потому, как у каждого окна в системе раскладка установлена независимо — при переключениями между окнами раскладка меняется.

Ну типа да, меня интересует событие смены языка ввода не родительской формы а той которая активна на данный момент, другими словами
событие смены указателя языка на яз. панели (типа RU на EN) во всех случаях.
Re[3]: Событие смены раскладки клавиатуры?
От: Nikolay_Ch Россия  
Дата: 09.07.13 11:22
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Если оставить смену раскладки, должно же быть событие смены активного окна на системном уровне???

AVA>Неужели все так грустно, и защищено в С#???
На системной — есть — событие WM_ACTIVATE
Re[3]: Событие смены раскладки клавиатуры?
От: RadmirT Россия  
Дата: 09.07.13 11:37
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Но если учитывать что это драйвер и постоянный цикл будет жрать хоть и небольшой ресурс, как то себя перестаешь уважать.

Драйвер на C# Вы батенька знаете толк в извращениях.
В чем смысл экономии на спичках? Сам .NET отжирает столько ресурсов что лишних 2-3 цикла погоду не сделают.
Re[3]: Событие смены раскладки клавиатуры?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.07.13 11:56
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Но если учитывать что это драйвер и постоянный цикл будет жрать хоть и небольшой ресурс, как то себя перестаешь уважать.

Чего не понимаю, это каким боком драйвер клавиатуры оказался связан с раскладками? Драйвер выдает коды нажатых клавишь, о существовании раскладок он знать не должен.

AVA>Если оставить смену раскладки, должно же быть событие смены активного окна на системном уровне???

AVA>Неужели все так грустно, и защищено в С#???
Причем же тут C#?
Re[3]: Событие смены раскладки клавиатуры?
От: Sinix  
Дата: 09.07.13 11:59
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Если оставить смену раскладки, должно же быть событие смены активного окна на системном уровне???

AVA>Неужели все так грустно, и защищено в С#???

Сам шарп тут не при чём, проблема — в крайне своеобразной документации. Если ей верить — можно ловить глобальным хуком WM_INPUTLANGCHANGE, как советуют здесь. Проблема в том, что начиная с XP этот код будет работать некорректно.

Рекомендуемый способ — InputLanguageProfileNotifySink.OnLanguageChange(). В WPF есть готовая реализация, класс — internal.

Можно подсмотреть код с помощью ilspy (PresentationCore, System.Windows.Input.InputLanguageProfileNotifySink), можно глянуть на исходник тут. Допилить напильником, использовать на свой страх и риск.
Re[4]: Событие смены раскладки клавиатуры?
От: AVALAH  
Дата: 12.07.13 15:05
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, AVALAH, Вы писали:


AVA>>Но если учитывать что это драйвер и постоянный цикл будет жрать хоть и небольшой ресурс, как то себя перестаешь уважать.

S>Чего не понимаю, это каким боком драйвер клавиатуры оказался связан с раскладками? Драйвер выдает коды нажатых клавишь, о существовании раскладок он знать не должен.

AVA>>Если оставить смену раскладки, должно же быть событие смены активного окна на системном уровне???

AVA>>Неужели все так грустно, и защищено в С#???
S>Причем же тут C#?


Может это и не совсем драйвер — это программка которая обслуживает все доп клавиши, и обеспечивает более комфортное переключение раскладок.
Использую активно 3 языка ввода. Выкручивать пальцы чтобы нажать три клавиши и запоминать очередность смены раскладок как то раздражает.
Смысл знать раскладку — подсветить английскую диодом ScrollLock.

Почему на C#? потому что с ним знаком с С++ не сложилось...
Re[5]: Событие смены раскладки клавиатуры?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.07.13 15:18
Оценка:
Здравствуйте, AVALAH, Вы писали:

AVA>Здравствуйте, samius, Вы писали:


AVA>Может это и не совсем драйвер — это программка которая обслуживает все доп клавиши, и обеспечивает более комфортное переключение раскладок.

AVA>Использую активно 3 языка ввода. Выкручивать пальцы чтобы нажать три клавиши и запоминать очередность смены раскладок как то раздражает.
То есть совсем не драйвер.
AVA>Смысл знать раскладку — подсветить английскую диодом ScrollLock.
а индикатора на панели задач недостаточно? Вот лично я на клаву вообще не смотрю, куда уж там разбираться, какой из диодов подсвечен...

AVA>Почему на C#? потому что с ним знаком с С++ не сложилось...

Ну дак у C++ с событиями смены активного окна тоже не очень сложено. Это вообще не языковой уровень. Это предметный уровень.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.