Узнать раскладку

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

Узнать раскладку

Сообщение kirrun » 01.06.2005 (Ср) 19:57

Собсно, сабж :roll: ... Поиском (как ни странно) ниче не нашел...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2005 (Ср) 20:20

GetKeyboardLayout, да?
Изображение

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 21:51

:roll:
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 22:04

хм... все бы гуд, но показывается раскладка в моей программе, а нужна текущая (в активном окне)...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 22:10

на всякий случай поясняю. Это для моей проги, расставляющей буквы на клаве в алфав. порядке. Када приходит сообщение о нажатии клавиши, нуно определить текущую раскаладку и в зависимости от нее послать рус или англ букву... но када приходит сообщение, GetKeyboardLayout возвращает раскладку в проге (а она дефолтная)...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2005 (Ср) 22:28

kirrun писал(а):хм... все бы гуд, но показывается раскладка в моей программе, а нужна текущая (в активном окне)...

idThread нужный передаёшь?
Изображение

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 23:24

э... а какой надо? я 0 передаю...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 01.06.2005 (Ср) 23:25

А... этол чтож, получается, надо ловить процесс окна, активного сейчас, находить его id и передавать?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.06.2005 (Чт) 4:53

GetGUIThreadInfo Function
...

idThread
[in] Identifies the thread for which information is to be retrieved. To retrieve this value, use the GetWindowThreadProcessId function. If this parameter is NULL, the function returns information for the foreground thread.
...
This function succeeds even if the active window is not owned by the calling process.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 8:41

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

Тада такая картинка... GetForegroundWindow находим активное окно, передаем его GetWindowThreadProcessId, а то, что получилось передаем в GetKeyboardLayout. Я правильно понял? Если правильно, то нельзя ли как-нибудь попроще?

ЗЫ. GSerg, честно говоря, не понял к чему это? Этой апишкой можно достать что-то, что мне нужно? Тада что надо передавать вторым аргументом?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 9:12

Так... сори, тормозю... Вопрос к GSerg'y отпадает.. Че-т я не посомтрел сразу про ету апишку... К GSerg'y новый вопрос: а как она мне поможет?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 9:40

Все. сделал так

Код: Выделить всё
If GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, vbNull)) = 68748313 Then


Все работает. Но по-прежнему не откажусь от более простого варианта...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.06.2005 (Чт) 13:58

Для справки.
vbNull = 1.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 14:25

пофигу. работает и это главное =)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 14:25

Да, кстати. Вот результат: http://bbs.vbstreets.ru/viewtopic.php?p=125587#125587
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.06.2005 (Чт) 14:56

kirrun писал(а):пофигу. работает и это главное =)

Ну-ну.
Передай vbNull куда-нибудь, где требуется [out] *int, который по спецификации допускается делать NULL.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 15:08

Не, ну конкретно в этом случае... :roll:

А что вообще-то надо передавать? ""?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.06.2005 (Чт) 15:20

byval 0&
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.06.2005 (Чт) 15:23

kirrun писал(а):Не, ну конкретно в этом случае... :roll:

А что вообще-то надо передавать? ""?

kirrun, забей, у тебя всё правильно :-)
Можешь вообще 0 передавать. Можешь 42, можешь 12345. Там без разницы.
Вариант с GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow())) - имхо самый простой.


2GSerg: а как, действительно, помогает GetGUIThreadInfo? Она же только окна возвращает? Чем тогда она лучше GetForegroundWindow?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.06.2005 (Чт) 15:26

tyomitch писал(а):Можешь 42...
:thumright:
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.06.2005 (Чт) 15:26

Она лучше тем, что если ей указать 0, то она сама возьмёт активный тред :)

А, тьфу ты :)
Чё-то у меня в кэше осталось с тех времён, когда всё пытались получить hwnd текстбокса, в котором каретка :) Бывает :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 17:35

хех =)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 02.06.2005 (Чт) 17:37

Да, кста, Темыч, Что-то не замечено чтобы ты смотрел мою программку? Мне ж интересно мнение столь авторитетного смпециалиста! ;)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 74

    TopList