API UnloadKeyboardLayout

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

API UnloadKeyboardLayout

Сообщение olesis » 15.07.2008 (Вт) 10:26

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

Код: Выделить всё

Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Const KLF_ACTIVATE = 1
Public Sub SetLanguage(ByVal s As String)
        Select Case UCase(s)
            Case "R"
                LoadKeyboardLayout("00000419", KLF_ACTIVATE)
            Case "U"
                LoadKeyboardLayout("00000422", KLF_ACTIVATE)
            Case "E"
                LoadKeyboardLayout("00000409", KLF_ACTIVATE)
            Case Else
        End Select
    End Sub

После выполнения кода в список раскладок спокойно добавляется украинский язык, а как его теперь так же программно выгрузить? вот этот код не срабатывает не в какую:
Код: Выделить всё

Private Declare Function UnloadKeyboardLayout Lib "user32" Alias "UnloadKeyboardLayout" (ByVal hkl As Long) As Long
    Public Sub RemoveLanguage(ByVal s As String)
        Select Case UCase(s)
            Case "R"
                UnloadKeyboardLayout("00000419")
            Case "U"
                UnloadKeyboardLayout("00000422")
            Case "E"
                UnloadKeyboardLayout("00000409")
            Case Else
        End Select
    End Sub


Что делаю не так? уже намучался, пробовал практически всё, и в шестнадцатиричном виде передавал параметр, и в десятичном, ну я не знаю уже что не так

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.07.2008 (Вт) 11:25

MSDN писал(а):If the function fails, the return value is zero. The function can fail for the following reasons:

An invalid input locale identifier was passed.
The input locale identifier was preloaded.
The input locale identifier is in use.
To get extended error information, call GetLastError.
Какая ошибка получается?
И, кстати, если уж речь идет за NET, то меняй в обяъвлениях Long на Integer.
Последний раз редактировалось Viper 15.07.2008 (Вт) 11:27, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение Хакер » 15.07.2008 (Вт) 11:26

(я пишу на .НЕТ, просто создал тут тему т.к код практически одинаковый, а людей сюда больше заходит )

Туда, куда ты поместил тему, заходит большее количество людей, потому что ещё не всем людям Microsoft со своей пропагандой дотнета разрушила мозг.

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

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 11:36

ну только этим и отличается, Long на Integer, это не суть, API везде API, сюда запостил т.к там шансы меньше что кто то ответит, всё таки API и .NET
Какая ошибка получается?

Язык не выгружается, в МСДН читал, все верно передаю, раскладка не активна, но не выгружается, возвращает 0 и всё, какие могут быть еще идеи?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.07.2008 (Вт) 11:43

ааа...у меня разрушен моск :geek:

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 13:19

К чему это сообщение?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.07.2008 (Вт) 14:08

olesis
Xakep писал(а):потому что ещё не всем людям Microsoft со своей пропагандой дотнета разрушила мозг

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 15.07.2008 (Вт) 14:30

Ramzes

:)

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 14:31

Ясно :) а по теме, какие идеи есть, у меня тогда тоже скоро мозг разрушиться :)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.07.2008 (Вт) 15:28

вижу ты не только тут отметился

для начала, как заметил Viper следует заменить Long на Integer

затем прочитать тут

и подумать: "а правильно ли ввел идентификатор языка"

и если првильно, то посмотреть, что вренет GatLastError

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.07.2008 (Вт) 15:33

Гм... А идея передавать строку в качестве целого числа вообще весьма продуктивна. Не тут ли собака покапалась?
Весь мир матрица, а мы в нем потоки байтов!

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.07.2008 (Вт) 16:27

удаляет украинский язык (раскладку если хочешь)
Код: Выделить всё

Private Declare Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As Long) As Long

Private Sub Command1_Click()

MsgBox UnloadKeyboardLayout(&H422)

End Sub

ну и соответственно на .NET
Код: Выделить всё
Public Class Form1
    Private Declare Function UnloadKeyboardLayout Lib "user32" (ByVal hkl As Integer) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(UnloadKeyboardLayout(&H422))
    End Sub
End Class

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 16:43

..........................нет слов........оказывается раскладка удаляется, но в списках так и висит, а через панель управления её не видно....мляяяяяя скоко нервов потратил, рамзес, большое человеческое спасибо, а так же вам всем, ребята вы единственные кто выручил :)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 15.07.2008 (Вт) 17:01

olesis
у меня на 2к она и из "списков" пропадает, разве что у тебя окошко с раскладками постоянно открыто, тогда возможно

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 17:33

Хм, интересно, поэкспериментирую ещё, всё равно спасибо, очень выручил

olesis
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 15.07.2008 (Вт) 10:17

Сообщение olesis » 15.07.2008 (Вт) 20:11

нашел причину, в реестре храниться список текущих раскладок, удаляем ключ с параметром языка раскладки и в списке он исчезает, ещё раз спасибо :) тему можно закрывать :shock:

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 15.07.2008 (Вт) 21:23

olesis

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


Вернуться в Visual Basic .NET

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

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

    TopList  
cron