Программно изменить раскладку клавиатуры
Код:
// подключаем системную DLL user32.dll
var user32 = new mdm.DLL(mdm.System.Paths.windows + "\\system32\\user32.dll");
// создаем текстовые поля для отображения результатов
createTextField("out1", 1, 20, 20, 200, 20);
out1.type = "dynamic";
out1.border = true;
createTextField("out2", 2, 20, 50, 200, 200);
out2.type = "input";
out2.multiline = true;
out2.border = true;
//go-это стандаотная кнопка
go.onRelease = Go;
function Go() {
// формируем список параметров вызова функции ActivateKeyboardLayout
// в оригинале она выглядит так
// HKL ActivateKeyboardLayout(
HKL hkl, // handle to keyboard layout
UINT Flags // keyboard layout flags
);
var parameter1 = user32.addParameter("integer", "1");
var parameter2 = user32.addParameter("integer", "8");
var res = user32.call("boolean", "ActivateKeyboardLayout");
out1.text = res;
user32.clear();
}
Здесь вызывается API-функция ActivateKeyboardLayout(), которая, собственно и меняет раскладку.
Параметры берутся из справки WIN API
Еще о переключении раскладки.
Вот так можно обойтись без подключения системных DLL.
Код:
createTextField("test", 1, 20, 20, 200, 200);
test.type = "input";
test.border = true;
test.multiline = true;
test.wordWrap = true;
go.label = "EN";
// ищем хэндл окна
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][0] != "form") {
i++;
}
var hwnd = wList[i][1];
// начальное значение раскладки, это численное представление того, что раскладка EN
var kblName = 0x04190419;
// go-это стандартная кнопка
go.onRelease = function() {
// ставим принудительно EN
mdm.System.postMessage(hwnd, 0x0050, 1, kblName);
switch (kblName) {
// меняем значение раскладки
// при каждом нажатии кнопки
case 0x04190419 :
kblName = 0x04090409;
go.label = "RU";
break;
case 0x04090409 :
kblName = 0x04190419;
go.label = "EN";
break;
}
};
В поле test можно проверять язык ввода.
form - Название формы приложения (form title). Окно самому себе шлет message - запрос на изменение раскладки WM_INPUTLANGCHANGEREQUEST( численное значение 0x0050) c параметром-значением раскладки.