Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
1

Язык ввода в консоль

01.01.2016, 13:17. Просмотров 1448. Ответов 7
Метки нет (Все метки)


Хотелось бы, чтобы при запуске консоли с ключом /k ?.bat в файле bat помимо прочих была команда устанавливающая ввод пользователя США. Чтобы не переключать язык.
В памяти процесса я нашел 840 байт которые меняются при переключении языка, можно покопаться с ними, но хотелось бы что-то попроще, если кто знает ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2016, 13:17
Ответы с готовыми решениями:

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

Русский язык в консоль
Привет всем, не знаю куда ещё это отнести(модеры сори если не сюда и если доставил больше работы)...

Язык ввода в 1С
Всем привет! Такая проблема: стоит терминальный сервер 2003 на нем 1С 8,2, при входе в терминал у...

Буфер ввода в консоль
Всем привет! Хочу воспользоваться функцией ReadConsole. Передам ей указатель на некий массив 10...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы DevOps-инженеров
7
10528 / 5490 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
01.01.2016, 13:24 2
Установить английский язык дефолтной раскладкой
0
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
01.01.2016, 13:29  [ТС] 3
Ну это на все приложения как я понял, а если конкретно этой консоли?
0
10528 / 5490 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
01.01.2016, 13:30 4
Пунто свичер раньше умел переключать язык индивидуально каждой программе
0
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
01.01.2016, 18:27  [ТС] 5
Запись в память не дает результата, при активации окна она снова переписывается, так что windows у себя где-то хранит.
В консольном приложении нужный результат получается после
C++
1
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 2, 0);
Добавлено через 7 минут
решение найдено, пишем после

C++
1
2
system("cmd");
return 0;
приложение завершается и оставляет после себя консоль с нужной раскладкой.

Добавлено через 1 час 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <Windows.h>
#include <tchar.h>
 
_TCHAR* Parametrs(int argc, _TCHAR** argv)
{
    size_t StrLen = 0;
    int i = 1;
    while (i < argc)
    {
        _TCHAR* CurrentStr = argv[i++];
        while (*CurrentStr++ != 0) StrLen++;
        StrLen ++;//длина вместе с 0 символом
    }
    _TCHAR* Result = new _TCHAR[StrLen+4];
    i = 1;
    Result[0] = __T('c');
    Result[1] = __T('m');
    Result[2] = __T('d');
    Result[3] = __T(' ');
    StrLen = 4;
    while (i < argc)
    {
        _TCHAR* CurrentStr = argv[i++];
        while (*CurrentStr != 0) Result[StrLen++] = *CurrentStr++;
        Result[StrLen++] = __T(' ');
    }
    Result[StrLen] = 0;
    return Result;
}
 
int main(int argc, _TCHAR* argv[])
{
    PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 2, 0);
    _TCHAR *str = Parametrs(argc,argv);
    system(str);
    delete[] str;
    return 0;
}
Делаем ярлык на получившийся exe файл, в свойствах ярлыка в поле объект добавляем нужные параметры например /k путь до shell.bat в котором настройка нужных параметров.
0
vavun
01.01.2016, 18:27
  #6

Не по теме:

Знатный костыль :D

0
Эксперт WindowsАвтор FAQ
17601 / 7444 / 884
Регистрация: 25.12.2011
Сообщений: 11,236
Записей в блоге: 16
02.01.2016, 14:55 7
Либо добавить ту программу в Autorun:
Windows Batch file
1
reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /d c:\test\lang.exe
Тогда не нужно будет создавать ярлык.
0
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
04.01.2016, 09:42  [ТС] 8
Добавил версию поддерживаю наличие нескольких раскладок, а также, чтобы не было изменений, если по умолчанию стоит то что надо.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <Windows.h>
#include <tchar.h>
 
_TCHAR* Parametrs(int argc, _TCHAR** argv)
{
    size_t StrLen = 0;
    int i = 1;
    while (i < argc)
    {
        _TCHAR* CurrentStr = argv[i++];
        while (*CurrentStr++ != 0) StrLen++;
        StrLen ++;//длина вместе с 0 символом
    }
    _TCHAR* Result = new _TCHAR[StrLen+4];
    i = 1;
    Result[0] = __T('c');
    Result[1] = __T('m');
    Result[2] = __T('d');
    Result[3] = __T(' ');
    StrLen = 4;
    while (i < argc)
    {
        _TCHAR* CurrentStr = argv[i++];
        while (*CurrentStr != 0) Result[StrLen++] = *CurrentStr++;
        Result[StrLen++] = __T(' ');
    }
    Result[StrLen] = 0;
    return Result;
}
 
int count = 0;
HKL HKLDef;
int run = 1;
 
LRESULT CALLBACK MainWindowCallback(
    HWND   Window,
    UINT   Message,
    WPARAM WParam,
    LPARAM LParam
    )
{
    LRESULT Result = 0;
    switch (Message)
    {
    case WM_INPUTLANGCHANGEREQUEST:
    {
        HKL hkl = GetKeyboardLayout(0);
        ++count;
        if (hkl == HKLDef && count != 1)
        {
            count = 0;
            run = 0;
        }
        if (LOWORD(hkl) == 0x409 && HIWORD(hkl) == 0x409)
        {
            --count;
            run = 0;
        }
        Result = DefWindowProc(Window, Message, WParam, LParam);
    }break;
    default:
    {
               Result = DefWindowProc(Window, Message, WParam, LParam);
    } break;
    }
    return(Result);
}
 
int main(int argc, _TCHAR* argv[])
{
    HKLDef = GetKeyboardLayout(0);
    if (LOWORD(HKLDef) != 0x409 || HIWORD(HKLDef) != 0x409)
    {
        WNDCLASS WindowClass = {};
        WindowClass.lpfnWndProc = MainWindowCallback;
        WindowClass.lpszClassName = "SwitchLang";
        if (RegisterClass(&WindowClass))
        {
            HWND WindowHandle = CreateWindowEx(
                0,
                WindowClass.lpszClassName, "SwitchLang", 0, 0, 0, 0, 0, 0, 0, 0, 0);
            if (WindowHandle)
            {
                MSG Message;
                for (;;)
                {
                    PostMessage(WindowHandle, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD, 0);
                    BOOL MessageResult = GetMessage(&Message, 0, 0, 0);
                    if (MessageResult > 0)
                    {
                        if (run == 0)  break; 
                        TranslateMessage(&Message);
                        DispatchMessage(&Message);
                    }
                    else
                    {
                        break;
                    }
                }
                DestroyWindow(WindowHandle);
            }
            else
            {
                count = 1;
            }
        }
        else
        {
            count = 1;
        }
        while (count > 0)
        {
            PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD, 0);
            count--;
        }
    }
    
    _TCHAR *str = Parametrs(argc,argv);
    _tsystem(str);
    return 0;
}


Добавлено через 4 минуты
Пришлось отдельное окно создавать потому что GetKeyboardLayout(ConhostThreadID); возвращает 0. Если нужная раскладка не найдена, то count = 0.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2016, 09:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вывести в консоль список стран, государственный язык в которых - английский
Есть программа требуется вывести в консоль список стран, гос. язык в которых английский(&quot;eng&quot;). ...

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

Qt установить язык ввода
Как средствами Qt установить нужный язык ввода?

Язык ввода на Windows 7
Установлю с английского на русский после зайду куданибудь например в интернет через браузер и он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.