Что нового

[Автоматизация] Как обновить языковую панель при добавлении и удалении языка, раскладки в WinХР

StarEdik

Новичок
Сообщения
365
Репутация
4
Здравствуйте!!!
Прошу помощи в написании скрипта.
По мере надобности приходиться добавлять и по окончании надобности удалят Французский язык. Для добавления и удаления языка, (раскладки) мне посоветовали пользоваться таким методом.
Код:
#Include <winapiex.au3>
 _WinAPI_LoadKeyboardLayout(1036) ;Add 
  ;_WinAPI_UnloadKeyboardLayout(1036) ;Del


В спойлере скрипт, который превосходно добавляет и удаляет нужный язык в операционной системе Windows 7. При этом языковая панель обновляется как и положено. Но в Windows XP этот панель не обновляется. Хотя новый язык уже установлен и в региональных настройках языка присутствует. :(

Пример скрипта
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <winapiex.au3>

$Form1 = GUICreate("Добавление и удаление раскладки", 187, 74, 192, 114)
$Button1 = GUICtrlCreateButton("Add_Fr", 8, 8, 97, 24)
$Button2 = GUICtrlCreateButton("Del_Fr", 9, 40, 97, 24)
$Button3 = GUICtrlCreateButton("Exit", 112, 40, 65, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $Button3
			Exit
		Case $Button1
			_WinAPI_LoadKeyboardLayout(1036)
			;MsgBox(0, 'Раскладка', 'Добавлена Французская раскладка...',1)
		Case $Button2
			_WinAPI_UnloadKeyboardLayout(1036)
			 ;MsgBox(0, 'Раскладка', 'Удалена Французская раскладка...',1)

	EndSwitch
WEnd
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
StarEdik
Я не знаю, но мне кажется, что перезапуск проводника может помочь :scratch:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
StarEdik
Не знаю, на сколько корректный способ, но в WINDOWS XP у меня сработал...

Код:
#Include <winapiex.au3>
 _WinAPI_LoadKeyboardLayout(1036)
 DllCall('User32.dll','Int','SendMessage','hwnd', 0xFFFF,'int', 0x50,'int', 0,'int', 0)

 MsgBox(0,'Раскладка','Добавлена Французская раскладка...')

 _WinAPI_UnloadKeyboardLayout(1036)
 DllCall('User32.dll','Int','SendMessage','hwnd', 0xFFFF,'int', 0x50,'int', 0,'int', 0)

 MsgBox(0,'Раскладка','Удалена Французская раскладка...')
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
snoitaleR
Спасибо за ответ. Но, не получается. Проблема остается. Может кто нить знает как справится с этим...
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
StarEdik [?]
как справится с этим
Вариант с возможным мельканием окна
Код:
#Include <WinAPIEx.au3>
Opt("WinWaitDelay", 0)

_WinAPI_LoadKeyboardLayout(1036) ;Add
Refresh()
MsgBox(0, "", "Add")

_WinAPI_UnloadKeyboardLayout(1036) ;Del
Refresh()
MsgBox(0, "", "Del")

Func Refresh()
  Run("RunDll32.exe shell32.dll,Control_RunDLL C:\Windows\system32\input.dll")
  WinMove(WinWait("Языки и службы текстового ввода"), "", -1000, 0)
  ControlClick("Языки и службы текстового ввода", "", 1)
EndFunc
 
Верх