Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > UnloadKeyboardLayout не удаляется раскладка


Автор: Akella 21.1.2013, 15:48
D2007
Win7

Код

procedure TForm13.Button1Click(Sender: TObject);
var
   Layout: array[0.. KL_NAMELENGTH] of char;
begin
  LoadKeyboardLayout(StrCopy(Layout,'00000422'), KLF_ACTIVATE);
  if GetLastError > 0 then
    ShowMessage(SysErrorMessage(GetLastError));//показываем текст ошибки  
end;

procedure TForm13.Button2Click(Sender: TObject);
begin
  UnloadKeyboardLayout(LANG_UKRAINIAN);
  if GetLastError > 0 then
    ShowMessage(SysErrorMessage(GetLastError));//показываем текст ошибки
end;


Раскладка добавляется, но НЕ удаляется.

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


user posted image

Автор: Keeper89 25.1.2013, 02:45
Потоков нет случайно?

Автор: Akella 25.1.2013, 10:07
Нет. Простейшее приложение с одной формой.

Добавлено через 51 секунду
Я уже решил проблему с помощью XAML+CMD. Но, хотелось бы и в WinAPI.

Автор: Чучмек 25.1.2013, 19:38
Цитата(Akella @  21.1.2013,  15:48 Найти цитируемый пост)
 но НЕ удаляется

Загружаешь $422, а удалить пытаешься $22.

Автор: Akella 26.1.2013, 14:26
Тогда подскажи, как правильно удалить, что подставить сюда UnloadKeyboardLayout(LANG_UKRAINIAN);

Добавлено через 50 секунд
А ты посмотри на картинку: 
Цитата(Akella @  21.1.2013,  15:48 Найти цитируемый пост)
в языковой панели есть украинский язык, можно переключаться на него, а в списке "Языки и службы текстового ввода" его нет.


Как так?

Автор: kami 26.1.2013, 17:42
Цитата(Akella @  26.1.2013,  14:26 Найти цитируемый пост)
что подставить сюда UnloadKeyboardLayout(LANG_UKRAINIAN);

hkl, возвращенный LoadKeyboardLayout, я думаю smile 

Цитата(Akella @  26.1.2013,  14:26 Найти цитируемый пост)
Как так?

Цитата

This function only affects the layout for the current process or thread.

Автор: Чучмек 26.1.2013, 18:01
Цитата(Akella @  26.1.2013,  14:26 Найти цитируемый пост)
что подставить сюда UnloadKeyboardLayout


Цитата(kami @  26.1.2013,  17:42 Найти цитируемый пост)
hkl, возвращенный LoadKeyboardLayout, я думаю


Цитата(Чучмек @  25.1.2013,  19:38 Найти цитируемый пост)
$422,


Автор: Чучмек 26.1.2013, 20:02
Код

function MAKELANGID(usPrimaryLanguage,usSubLanguage:Word):cardinal;
begin
result:= (usSubLanguage shl 10) or usPrimaryLanguage;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
LoadKeyboardLayout(PChar(IntToHex(MAKELANGID(LANG_UKRAINIAN,SUBLANG_DEFAULT),8)), KLF_ACTIVATE);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
UnloadKeyboardLayout(MAKELANGID(LANG_UKRAINIAN,SUBLANG_DEFAULT));
end;



Добавлено через 2 минуты и 41 секунду
http://msdn.microsoft.com/en-us/library/bb202928.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)