Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/55: Рейтинг темы: голосов - 55, средняя оценка - 4.93
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 318
1

Как программно сменить раскладку клавиатуры

26.11.2013, 20:59. Просмотров 10323. Ответов 47
Метки нет (Все метки)

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

Вот эта штука почему-то не работает:
ActivateKeyboardLayout(0,HKL_NEXT);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 20:59
Ответы с готовыми решениями:

Как определить раскладку клавиатуры консольного приложения?
Привет форумчане! Как определить раскладку клавиатуры консольного приложения?

Как сменить раскладку клавиатуры на Английскую по клику по Edit
Как сменить раскладку клавиатуры на Английскую по клику по Edit !!

Как сменить иконку?
Я поменял в настройках иконку, после того как я собираю проект в *.exe иконка...

Как сменить иконку приложения?
Добавил в свой проект манифест. Теперь не могу изменить иконку приложения. В...

Как сменить цвет Panel?
Всем привет! есть panel1 на котором button1. Нужно поменять цвет panel1. при...

47
alfikss
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
29.11.2013, 13:17 41
Цитата Сообщение от DDim1000 Посмотреть сообщение
Программа браузер нормально открывает и заходить на нужный сайт, и вводит логин и пароль, с этим нет проблем, проблема в том что, если стоит русская раскладка то программа вводит русские буквы.
Кусок кода в котором открывается браузер и вводится логин/пароль выложи, пожалуйста
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 318
29.11.2013, 13:53  [ТС] 42
Цитата Сообщение от alfikss Посмотреть сообщение
Кусок кода в котором открывается браузер и вводится логин/пароль выложи, пожалуйста
Delphi
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
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i,j:integer;
KK : HKL;
  KBid : Integer;
Const
  USKeyboard = 1033;
  RusKeyboard = 1049;
begin
i:=5000;
j:=strtoint(Edit1.Text);
 
j:=j*10;
 
 
ShellExecute(Handle, nil, 'http://www.odnoklassniki.ru/', nil, nil, SW_RESTORE);
 
  sleep(i);
    sleep(3000);
              if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) <> 67699721 then  //раскладка английская
              begin
                    while (GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) <> 67699721) do
                       begin
                         ActivateKeyboardLayout(0,HKL_NEXT);
                         sleep(1500);
                       end;
               end;
 
         keybd_event(Ord(VK_CONTROL), 0, 0, 0); //Нажатие  1.
    keybd_event(Ord('A'), 0, 0, 0); //Нажатие  1.
   keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   keybd_event(Ord(VK_CONTROL), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
 
         keybd_event(Ord(VK_BACK), 0, 0, 0); //Нажатие  1.
  // Sleep(3000);
   keybd_event(Ord(VK_BACK), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
 
 
  keybd_event(Ord('A'), 0, 0, 0); //Нажатие  1.
   keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
   Sleep(j);
 
   keybd_event(Ord('N'), 0, 0, 0); //Нажатие 2.
   keybd_event(Ord('N'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 2.
   Application.ProcessMessages;
   Sleep(j);
...
0
alfikss
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
29.11.2013, 14:27 43
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  hWindow: THandle;
  idProcess: DWORD;
  kbl: Cardinal;
  s:string;
begin
ShellExecute(Handle, nil, 'http://www.odnoklassniki.ru/', nil, nil, SW_RESTORE);
sleep(3000);
hWindow:=FindWindow(nil,'ГЋГ¤Г*îêëГ*Г±Г±Г*ГЁГЄГЁ - Mozilla Firefox');
if  hWindow <> 0 then
begin
  idProcess:=GetWindowThreadProcessId(hWindow);
  kbl:=LOWORD(GetKeyboardLayout(idProcess));
  case kbl of
    $409: s:='Eng';
    $419: s:='Rus';
    else s:='hz';
  end;
end;
 
if s='Rus' then begin
   keybd_event(Ord(VK_CONTROL), 0, 0, 0);
   keybd_event(Ord(VK_SHIFT), 0, 0, 0);
   keybd_event(Ord(VK_SHIFT), 0, KEYEVENTF_KEYUP, 0);
   keybd_event(Ord(VK_CONTROL), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
   Sleep(1000);
end;
 
   keybd_event(Ord(VK_CONTROL), 0, 0, 0);
   keybd_event(Ord('A'), 0, 0, 0);
   keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0);
   keybd_event(Ord(VK_CONTROL), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
 
   keybd_event(Ord(VK_BACK), 0, 0, 0);
   keybd_event(Ord(VK_BACK), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
 
   keybd_event(Ord('A'), 0, 0, 0);
   keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
   Sleep(1000);
 
   keybd_event(Ord('N'), 0, 0, 0);
   keybd_event(Ord('N'), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
   Sleep(1000);
end;
У меня браузер Firefox, раскладка переключается по Ctrl+Shift. Если подобные переменные заранее не известны, то подумай над универсальностью. Ну или пиши сюда, вместе подумаем

Добавлено через 50 секунд
ой, end из 20 строки в конец перенеси
1
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 318
30.11.2013, 21:40  [ТС] 44
Цитата Сообщение от alfikss Посмотреть сообщение
....
У меня браузер Firefox, раскладка переключается по Ctrl+Shift. Если подобные переменные заранее не известны, то подумай над универсальностью. Ну или пиши сюда, вместе подумаем

...
Я чуть-чуть изменил код(if заменил на while do), и сейчас в Google Chrome отлично работает, но вот с Internet Explorer зацикливается, почему так?
0
alfikss
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
30.11.2013, 23:09 45
Дак код то покажи)
0
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 318
30.11.2013, 23:36  [ТС] 46
Цитата Сообщение от alfikss Посмотреть сообщение
Дак код то покажи)
Delphi
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
ShellExecute(Handle, nil, 'http://www.odnoklassniki.ru/', nil, nil, SW_RESTORE);
        sleep(3000);
 
        hWindow:=FindWindow(nil,'Одноклассники - Internet Explorer');
if  hWindow <> 0 then
begin
  idProcess:=GetWindowThreadProcessId(hWindow);
  kbl:=LOWORD(GetKeyboardLayout(idProcess));
  case kbl of
    $409: s:='Eng';
    $419: s:='Rus';
    else s:='hz';
  end;
end;
 
while  s<>'Eng' do begin
   keybd_event(Ord(VK_CONTROL), 0, 0, 0);
   keybd_event(Ord(VK_SHIFT), 0, 0, 0);
   keybd_event(Ord(VK_SHIFT), 0, KEYEVENTF_KEYUP, 0);
   keybd_event(Ord(VK_CONTROL), 0, KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
   Sleep(1000);
  idProcess:=GetWindowThreadProcessId(hWindow);
  kbl:=LOWORD(GetKeyboardLayout(idProcess));
    case kbl of
    $409: s:='Eng';
    $419: s:='Rus';
    else s:='hz';
  end;
end;
0
alfikss
12 / 12 / 3
Регистрация: 07.05.2013
Сообщений: 139
30.11.2013, 23:51 47
Не
Delphi
1
hWindow:=FindWindow(nil,'Одноклассники - Internet Explorer');
а
Delphi
1
hWindow:=FindWindow(nil,'Одноклассники - Windows Internet Explorer');
1
DDim1000
1 / 1 / 0
Регистрация: 17.12.2011
Сообщений: 318
01.12.2013, 00:00  [ТС] 48
Цитата Сообщение от alfikss Посмотреть сообщение
Не
Delphi
1
hWindow:=FindWindow(nil,'Одноклассники - Internet Explorer');
а
Delphi
1
hWindow:=FindWindow(nil,'Одноклассники - Windows Internet Explorer');
Спасибо большое.
0
01.12.2013, 00:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2013, 00:00

StatusBar: как сменить цвет фона?
Подскажите как это можно сделать в программе. Хочу в случае удачи окрашивать в...

Как сменить тему оформления приложения
Когда то где то видела что можно в делфи сменить тему оформления и поставила...

Как сменить стандартное окно в делфи ?
Саабж


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

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

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