Как определить текущий язык в системе?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Как определить текущий язык в системе?

Сообщение АндрейБ » 14.09.2011 (Ср) 13:11

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

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 13:33

А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 13:40

АндрейБ писал(а):хочу что бы пользоватлеь видел при вводе какой язык установлен?

Зачем?

Ладно, я предчувствую здесь неладное.

Под языком может подразумеваться:
  1. Язык системы. Например «Windows на английском» или «Windows на немецком».

  2. Языковая локаль для неюникодных приложениях:
    lng_1.png
    lng_1.png (21.88 Кб) Просмотров: 9855

  3. Что-то, относящееся к раскладке. Тут большинство совершают глупость, полагая, что к раскладке может относится только язык. Например русская раскладка или английская. Ничего подобного. Есть языки раскладок, а есть ещё сами раскладки для одного языка.
    Вот например, 2 языка, и 4 раскладки:
    lng2.png
    lng2.png (15.5 Кб) Просмотров: 9855

Что из трёх (четырёх) вещей имелось ввиду? Почему те, кто спрашивают, подразумевают, что отвечающий заведомо выберет что-то одного из всех возможных вариантов? Почему те, кто тыцкают, берут на себя смелость угадывать один из вариантов?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 16:43

Почему те, кто тыцкают, берут на себя смелость угадывать один из вариантов?
А кто мне запретит? Я тыцкнул и с вероятностью 90% попал в точку, т.к. ТС хоть и невнятно, но заметил:
хочу что бы пользоватлеь видел при вводе какой язык установлен


Или может быть при вводе текста пользователю нужно видеть язык системы? Что за бред?

Не надо попусту занудствовать, если я ошибся, то ТС меня поправит.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 16:52

Twister писал(а):невнятно, но заметил:
хочу что бы пользоватлеь видел при вводе какой язык установлен


А ещё он заметил:
АндрейБ писал(а):текущий язык в системе

А то, о куда ты тыцкнул, не system-specific, а thread-specific (или process-specific, вы так и не разобрались). А вот system-specific — как раз первые два пункта моего списка.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 14.09.2011 (Ср) 17:03

Наверное то что относиться к раскладке. У меня 2 раскладки русская и анлийская. Хочу что бы в диалоговом окне было указано текущий язык накотором будет писаться в поле.
И еще подскажите по регистру, верхний/нижний - как определить текущий и как установить по умолчанию нужный?
Довожу до ума приложение, решил некоторые шероховатости убрать.
Кто ищет, тот всегда найдет ...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 17:10

Зачем это нужно? Раскладка и клавиатура отображается в языковой панели рядом с треем. Регистр отображается лампочкой на клавиатуре. Зачем дублировать хорошо отлаженные и общеизвестные привычные индикаторы в своём интерфейсе?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 17:19

Хакер писал(а):А ещё он заметил:
АндрейБ писал(а):текущий язык в системе
Выражение "в системе" очень часто употребляется всеми категориями пользователей как аналог выражения "на данный момент". "У меня в системе наблюдаются зависоны", к примеру. Поэтому лично мне, так же как и ТС, всё было прекрасно понятно.

(или process-specific, вы так и не разобрались)
Разобрались. Thread.

Регистр отображается лампочкой на клавиатуре.
Не факт. У меня на ноуте вообще нет лампочек-индикаторов.

АндрейБ
Хочу что бы в диалоговом окне было указано текущий язык накотором будет писаться в поле.
Решение я дал.
А я все практикую лечение травами...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 14.09.2011 (Ср) 17:23

:) - парни если знаете помогите.
Зачем - что бы все работало тип-топ.
Кто ищет, тот всегда найдет ...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 17:32

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  KeyState:  TKeyboardState;
begin

  GetKeyboardState(KeyState);

  if (KeyState[VK_CAPITAL] = 0) then
    KeyState[VK_CAPITAL] := 1
  else
    KeyState[VK_CAPITAL] := 0;

  SetKeyboardState(KeyState);

end;
Для NumLock использовать константу VK_NUMLOCK.
Гуглится всё это дело на раз, кстати.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 17:45

Twister, это моветон, писать здесь систематически код на паскале.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 14.09.2011 (Ср) 17:56

Это на VB?
Кто ищет, тот всегда найдет ...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 18:15

Хакер писал(а):Twister, это моветон, писать здесь систематически код на паскале.

Тебя это напрягает?
Вообще-то, я привожу примеры использования WindowsAPI, понимание которого от языка не зависит.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 19:13

Twister писал(а):Тебя это напрягает?

Да.

Twister писал(а):Вообще-то, я привожу примеры использования WindowsAPI, понимание которого от языка не зависит.

Надо приводить такие примеры на правильном языке, а не абы-каком.
Такие номера можно проделать в том разделе, но не в этом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 14.09.2011 (Ср) 19:25

Если напрягает - можешь снести все мои посты, неугодные тебе, о великий админ загнивающего VBStreets! А так же и аккаунт до кучи, чтоб глаза не мозолил.
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 14.09.2011 (Ср) 19:37

Эмоции не к месту.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Как определить текущий язык в системе?

Сообщение Rody66 » 14.09.2011 (Ср) 22:31

И еще подскажите по регистру, верхний/нижний - как определить текущий и как установить по умолчанию нужный?

Присоединяясь к вопросу, по инету полазил, никаких путных проверок регистра с GetKeyboardState не нашел.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить текущий язык в системе?

Сообщение ger_kar » 16.09.2011 (Пт) 6:09

Хакер писал(а):Эмоции не к месту.
Это точно.
Twister писал(а):Вообще-то, я привожу примеры использования WindowsAPI, понимание которого от языка не зависит.

Ну вообще понятность использования WinAPI, от того что пример приведен на том языке, которого участник может вообще не понимать "сильно возрастает". Я например изучал принципы работы WinApi на примерах для VB, в нете множество примеров на C/C++, но для меня они были бесполезными. Некоторые примеры использования WinAPI бывают сами по себе довольно сложные, а тут еще язык незнакомый. Хотя, что касается меня, то примеры на паскале/делфи мне вполне понятны. С другой стороны, я как и Хакер считаю, что в этом разделе примеры должны быть на VB.
Бороться и искать, найти и перепрятать

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 16.09.2011 (Пт) 7:04

Это точно.

я как и Хакер считаю, что в этом разделе примеры должны быть на VB

Вот поддакивать только не надо. Правила почитай для начала, а потому уже соглашайся с кем-то там.

Тут никаких эмоций. Я на полном серьёзе предложил снести к чертям мой аккаунт.
Видите ли, я уже много-много лет не пишу на гуано-VB и писать не собираюсь. И если понты Хакера (именно понты, т.к. в правилах не запрещено использование не BASIC-языков в тематических разделах) не позволяют здесь доносить знания народу на других языках, то извините - мне здесь делать нечего.
А я все практикую лечение травами...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить текущий язык в системе?

Сообщение ger_kar » 16.09.2011 (Пт) 7:35

Twister писал(а):Вот поддакивать только не надо. Правила почитай для начала, а потому уже соглашайся с кем-то там.
Читал я правила это во первых, во вторых я никому не поддакиваю, ибо всегда выражаю собственное мнение, а мнение мое таково, что хотя использование других языков и не запрещено, но все-таки странно в разделе посвященном VB, разбирать примеры на паскале. Хорошо, что хоть еще на паскале, а не на Си. Я например не являюсь профессионалом в программировании, я простой любитель и мне по душе примеры на "родном" для меня VB. Поэтому я согласился с мнением Хакера.
Twister писал(а): И если понты Хакера (именно понты, т.к. в правилах не запрещено использование не BASIC-языков в тематических разделах) не позволяют здесь доносить знания народу на других языках, то извините - мне здесь делать нечего.
Ну вообще никто знания доносить не запрещает, наоборот спасибо. Но все таки хотелось бы, что-бы примеры были на VB, ну а там уж как получится.
Twister писал(а):Видите ли, я уже много-много лет не пишу на гуано-VB и писать не собираюсь.

Ну я думаю, что для проффи, не составит большого труда снизойти до нас простых смертных и донести свет знаний все таки на VB (это просьба), но если это так трудно или лень, то тогда извиняйте ;) .
Бороться и искать, найти и перепрятать

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 16.09.2011 (Пт) 11:45

Ладно, с горем пополам я разобрался с языком, как определить текущий (я думаю сделал криво, но зато работает).
Вопрос в следующем как перехватить нажатие клавиш приводящих к смене языка(у меня alt+shift), просто событие keypress -
не действует, почему-то не определяет нажатие этих клавиш, пробовал на другие события формы и поля, не нашел что бы реагировало.
Каким событием в форме поймать смену языка?

По регистру вопрос так и остался открытым?
Кто ищет, тот всегда найдет ...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 16.09.2011 (Пт) 12:26

Каким событием в форме поймать смену языка?

WM_INPUTLANGCHANGEREQUEST, WM_INPUTLANGCHANGE

Хотя может я зря привёл ссылку на msdn? Там же определение константы дано на C, Хакера и ger_kar опять стошнит от не-BASIC языка.

По регистру вопрос так и остался открытым?

Я же привёл выше код, который переключает CapsLock и узнаёт состояние. Не то?
А я все практикую лечение травами...

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Как определить текущий язык в системе?

Сообщение Rody66 » 16.09.2011 (Пт) 12:50

Я же привёл выше код, который переключает CapsLock и узнаёт состояние. Не то?

Это тот, что на паскале что ли? Сколько я на бейсике не шаманил с GetKeyboardState , так ни к чему и не пришел.. Уже 3 человека набралось с желанием узнать как же все-таки на vb6 определить регистр.. Что ж, ждем сведущих.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 16.09.2011 (Пт) 13:35

Сколько я на бейсике не шаманил с GetKeyboardState , так ни к чему и не пришел
Функция - одна. И если её правильно вызывать, то и работать она будет хоть из VB, хоть из Delphi. Поэтому Вам не "ждать сведущих", а учиться вызывать API из VB. Возможно, у Вас был косяк с передачей параметров (самая распространённая ошибка). Или в структуру что-то не то писали.

Так или иначе решение вопроса - GetKeyboardState.
А я все практикую лечение травами...

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Как определить текущий язык в системе?

Сообщение Rody66 » 16.09.2011 (Пт) 13:50

Возможно, у Вас был косяк с передачей параметров (самая распространённая ошибка). Или в структуру что-то не то писали.

Все верно, с параметрами постоянно была какая то неразбериха, кстати частенько даже и программа и сам бейсик вообще вылетали, не часто такое увидишь..
Функция - одна. И если её правильно вызывать, то и работать она будет хоть из VB, хоть из Delphi. Поэтому Вам "не ждать сведущих

Тем не менее, не сочтите за грубость, но создается впечатление, что Вы сами не в курсе как это осуществить на вб (либо чисто из принципа не желаете это делать публично, в этой теме. В таком случае был бы рад увидеть пример на вб в личке, спасибо).

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как определить текущий язык в системе?

Сообщение Twister » 16.09.2011 (Пт) 14:08

Что за детский наив? "Не знаю как сделать", "не выкладываю публично"... Это Вам что, 0day-код какой-то? Всё доступно на просторах сети, информации навалом. Нужно только не лениться.
Держите наздоровье.

Код: Выделить всё
Option Explicit
Private Declare Function GetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_KEYDOWN = 0
Private Const KEYEVENTF_KEYUP = &H2

Private Sub CommandButton1_Click()
' Включен ли Caps?
Dim keystat(0 To 255) As Byte
Dim bCapsOn As Boolean

GetKeyboardState keystat(0)

bCapsOn = keystat(vbKeyCapital) = 1
MsgBox bCapsOn
End Sub

Private Sub CommandButton2_Click()
' Переключаем Caps
keybd_event vbKeyCapital, 0, KEYEVENTF_KEYDOWN, 0
keybd_event vbKeyCapital, 0, KEYEVENTF_KEYUP, 0
End Sub
А я все практикую лечение травами...

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Как определить текущий язык в системе?

Сообщение Rody66 » 16.09.2011 (Пт) 14:41

Что за детский наив? "Не знаю как сделать", "не выкладываю публично"... Это Вам что 0day-код какой-то? Всё доступно на просторах сети, информации навалом. Нужно только не лениться.

Дак Вы меня не так поняли :) Я о вашей перепалки с Хакером, кто его знает, может после этого Вы из принципа не желали выкладывать исходники на бейсике, ну ладно, уже не суть. А инет и форум я неплохо перерыл на эту тему, но сами понимаете, не простой способ вызова функции очень затрудняет решение проблемы (хочу кстати отметить, что был близок к решению, но чуть-чуть ума не хватило).
А за код огромное спасибо, и ни в коем случае не покидайте пост наставника по бейсику, как же новички будут программирование осваивать без таких, как Вы. Еще раз спасибо и удачи!

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 08.02.2012 (Ср) 16:41

Спасибо огромное. А на каком событии можно перехватить в форме изменение статуса CAPS LOCk или изменения языка.
Просто на нажатие клавиш форме - перехвать этих событий не просиходит.
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Как определить текущий язык в системе?

Сообщение АндрейБ » 09.02.2012 (Чт) 9:23

нашел событие PRESS_UP.
Кто ищет, тот всегда найдет ...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить текущий язык в системе?

Сообщение Хакер » 09.02.2012 (Чт) 11:51

Такого нет.
Его даже не может быть, потому что большинству вещей в мире дают осмысленные названия, а это переводится как «надавить вверх».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList