Выручайте, любители переключать раскладку клавы по правому CTRL!

  • Автор темы Jers
  • Дата начала
Stas_K

Stas_K

Участник
Регистрация
24.01.2006
Сообщения
924
Реакции
2
Баллы
18
Программеры есть?
Вот исходник, переключает по любому Ctrl, не работает в консольных приложениях... Меня на большее не хватило :) Может, кто что поправит?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure HotKeyPressed( var Msg: TMessage); message WM_HOTKEY;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
RegisterHotKey(Handle, 1, MOD_CONTROL, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle, MOD_CONTROL);
end;

Procedure TForm1.HotKeyPressed( var Msg: TMessage);
Var
KeyState:TKeyboardState;
rus,eng,curKey,progKey: HKL;
hwProg,progId : THandle;
Begin
If Msg.LParamHi=VK_CONTROL Then
Begin
hwProg := GetForegroundWindow;
progId := GetWindowThreadProcessId(HwProg,nil);
SetForegroundWindow(hwProg);
SetActiveWindow(hwProg);
rus:=LoadKeyboardLayout('00000419', 0);
eng:=LoadKeyboardLayout('00000409', 0);
progKey := GetKeyboardLayout(progId);
If ProgKey=rus
Then ActivateKeyboardLayout(eng,KLF_ACTIVATE)
Else ActivateKeyboardLayout(rus,KLF_ACTIVATE);
If ProgKey=rus
Then ActivateKeyboardLayout(eng,KLF_ACTIVATE)
Else ActivateKeyboardLayout(rus,KLF_ACTIVATE);
curKey := GetKeyboardLayout(0); // Получить текущую раскладку
if progKey <> curKey then begin
sendMessage(hwProg,WM_INPUTLANGCHANGEREQUEST,1,curKey);
Application.processMessages;
end;
End;
End;

end.
 
Qok

Qok

Новичок
Регистрация
03.09.2004
Сообщения
45 424
Реакции
239
Баллы
0
А чего такой огород городить? не проще ли пойти и по-человечески поговорить с теми, кто все запреты наложил. Я, думаю, объяснив ситуацию, гораздо проще добиться разрешения на использование того, чем ты привык пользоваться. А вот если голову поломать, как обдурить, то тогда советом не могу помочь.
 
dalex

dalex

Новичок
Регистрация
15.02.2006
Сообщения
17 333
Реакции
49
Баллы
0
найди программку lswitch что ли, что то типа этого. она всего 2кб весит и меняет язык при нажатии на клавишу контекстного меню (которая слева от правого шифта). На сайта изготовителя есть исходный код программы - там просто поменять событие на нужную клавишу. Прога вообще невидимка, запускаешь её и всё. Никакого интерфейса нет - чистый отлов нажатия нужной клавиши.
 
OP
Jers

Jers

Участник
Регистрация
02.12.2004
Сообщения
2 334
Реакции
1
Баллы
38
найди программку lswitch что ли, что то типа этого. она всего 2кб весит и меняет язык при нажатии на клавишу контекстного меню (которая слева от правого шифта). На сайта изготовителя есть исходный код программы - там просто поменять событие на нужную клавишу. Прога вообще невидимка, запускаешь её и всё. Никакого интерфейса нет - чистый отлов нажатия нужной клавиши.

Нашел такую, посмотрел... Проблема в том, что ей можно указать скэн-код кпопки, по которой надо переключаться. А те кнопки, которые мне интересны скэн кодов сами не имеют... Т.е. с ними данная прога не работает (или ее надо дорабатывать...)
Вобщем, пока не везет...
 
S

Stealth™

Guest
Не спасет. Регится он...
Я делал следующим образом:
Устанавливаешь её на комп (не тот, который интересен, а на другой: домашний, соседний....), тупым копированием переносишь папку с прогой, делаешь автозапуск не в реестре а в StartUp-е.
Некоторые версии (не самые свежие) работают так.
 
Верх Низ