Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407

Грамотное получение раскладки клавиатуры

19.11.2011, 02:08. Показов 2512. Ответов 5

Студворк — интернет-сервис помощи студентам
Вот что у меня получилось.
Каждую 0,1 секунды идет опрос на значение раскладки клавиатуры.
Получаем, проходим по условиям и у нас есть необходимое.


Вопрос в том - правильно ли это?

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

В принципе и это не тяжелое, но буду рад комментариям.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetWindowThreadProcessId(<[In]()> ByVal hWnd As IntPtr, <Out(), [Optional]()> ByVal lpdwProcessId As IntPtr) As Integer
    End Function
 
    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetForegroundWindow() As IntPtr
    End Function
 
    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetKeyboardLayout(<[In]()> ByVal idThread As Integer) As UShort
    End Function
 
    Private Function GetKeyboardLayout() As UShort
        Return GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero))
    End Function
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 100
        Timer1.Start()
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim r = GetKeyboardLayout()
        Dim rr As String
        If r = 1033 Then
            rr = "EN"
        ElseIf r = 1049 Then
            rr = "RU"
        ElseIf r = 1058 Then
            rr = "UK"
        Else
            rr = "??"
        End If
        Label1.Text = rr
    End Sub
End Class
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2011, 02:08
Ответы с готовыми решениями:

Получение раскладки клавиатуры
В общем столкнулся с этой проблемой. Программа записывает в Listbox раскладку клавиатуры каждые 5 мин. Ну суть не в этом. Она записывает...

Смена раскладки клавиатуры
Вывести в label текущую раскладку клавиатуры. При смене языка поменять его в label То есть если язык ENG в LAbel выводиться ENG, а если...

Проблема переключения раскладки клавиатуры
Приветствую всех кто это читает! Начал изучать программирование, и столкнулся с проблеммой переключения раскладки клавиатуры. Замучился...

5
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
19.11.2011, 02:10
Цитата Сообщение от abbat81 Посмотреть сообщение
Каждую 0,1 секунды
звучит устрашающе
1
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
19.11.2011, 02:20  [ТС]
Памирыч, ну можно аж в 5 раз раз "облегчить нагрузку", сделав интервал = 500
По этому и задался таким вот вопросом.
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
19.11.2011, 03:41
VB.NET
1
Text = System.Windows.Forms.InputLanguage.CurrentInputLanguage.LayoutName
1
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
19.11.2011, 04:08  [ТС]
edward_freedom, отлично, а если его в таймер на пол секунды поставить - это будет не кощунством?
Мне нужно чтобы так же шустропоказывало как на языковой панель.
Не могу ничего по ПРИНЦИПУ другого додумать кроме таймера.

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

Этот вариант дает код языка:

Text = myCurrentLanguage.Culture.LCID

Например русский выдаст 1049, укр = 1058, США = 1033

На что легко лепить условия:

Например:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
  Dim myCurrentLanguage As InputLanguage = InputLanguage.CurrentInputLanguage
        Dim r = myCurrentLanguage.Culture.LCID
        Dim rr As String
         If r = 1033 Then
            rr = "EN"
        ElseIf r = 1049 Then
            rr = "RU"
        ElseIf r = 1058 Then
            rr = "UK"
        Else
            rr = "??"
        End If
        Label1.Text = rr
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2011, 04:08
Помогаю со студенческими работами здесь

При смене раскладки клавиатуры менять значение в label
На форме label. Как при смене раскладки клавиатуры (то есть при нажатии на Shift+Alt) сменить раскладку клавиатуры и в label написать...

Почему переключение раскладки клавиатуры срабатывает только в DesignTime?
Всем здравствуйте. При запуске приложения анализируем какая раскладка в системе является текущей и если она не русская, переключаемся на...

Перевод одних символов в другие по принципу смены раскладки клавиатуры
Здравствуйте. Хочу написать программу, в которой бы были два текстбокса. В один текстбокс вводим текст, напрмер &quot;Ghbdtn? Dfcz? rfr...

Как отловить смену раскладки клавиатуры?
Нужно на форме вывести значок с текущей раскладкой клавиатуры. В Net есть событие Form.InputLanguageChanged, но оно предназначено только...

Получение раскладки клавиатуры на Windows
Привет всем. В общем, на винде нужно получить текущую раскладку клавиатуры. Написал таким образом, но как сделать так, чтобы я не вручную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
 Аватар для abbat81
33 / 33 / 3
Регистрация: 20.07.2011
Сообщений: 407
19.11.2011, 04:08  [ТС]
Оказывается, в нете много примеров с раскладкой.
Наиболее подходящий ,это когда вне зависимости от языка системы можно получить значение одного формата. То есть цифрой ,которая означает язык. на основании цифры можно делать условия не боясь, что условие сработает только при наличии настройки на этот язык.

Этот вариант дает код языка:

Text = myCurrentLanguage.Culture.LCID

Например русский выдаст 1049, укр = 1058, США = 1033

На что легко лепить условия:

Например:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
  Dim myCurrentLanguage As InputLanguage = InputLanguage.CurrentInputLanguage
        Dim r = myCurrentLanguage.Culture.LCID
        Dim rr As String
         If r = 1033 Then
            rr = "EN"
        ElseIf r = 1049 Then
            rr = "RU"
        ElseIf r = 1058 Then
            rr = "UK"
        Else
            rr = "??"
        End If
        Label1.Text = rr
0
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru