Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2011, 14:28   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Добавить/убрать раскладку

Всем доброго. Есть задача - при запуске программы добавляется язык (новая раскладка) например Украинский. При следующем запуске этот добавленный язык удаляется. И так по кругу. Запустил - поставил, запустил - удалил.

Посоветуйте стратегию. Как проще поступить, дабы решить эту задачу.

P.S. Интересует именно стратегия в ВинАПИ, язык не важен.
I'm learning to live...

Последний раз редактировалось Stilet; 19.07.2011 в 14:31.
Stilet вне форума Ответить с цитированием
Старый 19.07.2011, 17:28   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

LoadKeyboardLayout
ActivateKeyboardLayout
UnloadKeyboardLayout
и все такое остальное
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 19.07.2011, 17:58   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и все такое остальное
Вот насчет остального мне и интересно. меня смутило следующее описание:
Цитата:
This function only affects the layout for the current process or thread.
А мне нужно глобально. Как будто я ручками новый язык внес...
может проще будет в реестр вносить и удалять? А вдруг есть путь попроще?
Может в .NET есть ченить для добавления новой раскладки в систему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.07.2011, 22:31   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Например так (код ниже)
При запуске программа добавляет украинскую раскладку клавиатуры ко всем уже существующим, ставит горячие кнопки Alt+U при нажатии на которые она завершается удаляя данную раскладку. Вроде работает.
Код:
		.386
	.model flat,stdcall
	option casemap:none
	include \masm32\include\windows.inc
	include \masm32\include\user32.inc
	include \masm32\include\kernel32.inc
	includelib \masm32\lib\user32.lib
	includelib \masm32\lib\kernel32.lib
	include \masm32\include\shell32.inc
	includelib \masm32\lib\shell32.lib
	include \masm32\include\advapi32.inc
	includelib \masm32\lib\advapi32.lib

	HOTKEY_ID equ WM_USER+10

.code
ukr db '00000422',0
pathkey db 'Keyboard Layout\Preload\',0
form db '%u',0
start proc
local pKey:dword
local buff[100h]:byte
local msg:MSG
		lea ebx,pKey
		invoke RegOpenKeyEx,HKEY_CURRENT_USER, offset pathkey,0,KEY_READ or KEY_WRITE,ebx
		mov ebx,dword ptr[ebx]
		push ebx
			xor edi,edi
			@@:
				push sizeof buff				
					mov ecx,esp
					xor eax,eax
					invoke RegEnumValue,ebx,edi,addr buff,ecx,eax,eax,eax,eax			
					xchg ecx,eax
					inc edi			
				pop eax
			jecxz @b
			lea esi,buff
			invoke wsprintf,esi,offset form,edi
			mov edi,offset ukr
			invoke RegSetValueEx,ebx,esi,0, REG_SZ,edi, sizeof ukr
			push esi
			push ebx
				xor ebx,ebx
				
				invoke LoadKeyboardLayout,edi,KLF_ACTIVATE or KLF_REORDER
				push eax
					invoke RegisterHotKey,ebx,HOTKEY_ID,MOD_ALT,055h	
					.WHILE TRUE
						lea esi,msg
						assume esi:ptr MSG
							invoke	GetMessage,ADDR msg,ebx,ebx,ebx
							.BREAK .IF (!eax)
								cmp [esi].message,WM_HOTKEY
								jz @f
						assume esi:ptr none
					.ENDW		
					@@:
					invoke	UnregisterHotKey,ebx,HOTKEY_ID
				call UnloadKeyboardLayout
			call RegDeleteValue
		call RegCloseKey
	invoke	ExitProcess,ebx
start endp
end start
Вложения
Тип файла: rar keyboard.rar (1.6 Кб, 10 просмотров)
Нет, ну правда..

Последний раз редактировалось yuran666666; 19.07.2011 в 23:21.
yuran666666 вне форума Ответить с цитированием
Старый 20.07.2011, 07:26   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит всетки через реестр топать? Ок идею понял, спасибо

P.S. На всякий случай еще пороюсь в дотнете, может там чего докрутили для пущего удобства...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2011, 11:35   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Этот ключ добавляется для того чтобы новая раскладка появилась в программке переключения раскладок(там ярлык еще в трее у нее висит). Сама раскладка добавляется функцией, которую я указал выше.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить язык ввода (раскладку клавиатуры) при получении фокуса полем SMShrek Microsoft Office Access 4 04.07.2011 09:42
Пользователь запретил приглашать себя в приложения", сколько не парился никак не могу убрать. Как убрать? nigretos Свободное общение 3 10.06.2011 15:48
к элементам первой половины массива добавить минимум, а к элементам второй - добавить максимум specialist Паскаль, Turbo Pascal, PascalABC.NET 3 08.05.2011 01:46
Вывести на канву раскладку клавиатуры phphel Общие вопросы Delphi 7 06.04.2011 13:02
Переключить раскладку клавиатуры. SKYLINEGTR Помощь студентам 2 02.02.2011 00:50