Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2008, 03:46   #1
xshStasX
 
Регистрация: 09.08.2008
Сообщений: 4
Стрелка Ловушка на клаву(нужно немного улутшить ее)

Есть такая ловушка
Код:
(*----------------------------------------------------------------------*)
Library Hook;
Uses
Windows,Messages,Dialogs,sysutils;
var
H: THandle;
Function HookProc(Code:Integer;Wparam:Word;Lparam:Longint):Integer;stdcall;
begin
if (Code=HC_ACTION)and((Lparam and wm_char)=0) then
  ShowMessage(chr(Wparam));
CallNextHookEx(h,code,Wparam,Lparam);
end;
procedure SetHook;
begin
 h:=SetWindowsHookEx(WH_KEYBOARD,@hookproc,HInstance,0);
end;
Procedure DelHook;
 begin
  UnhookWindowsHookEx(H);
 end;
exports
SetHook,DelHook;
begin
end.
(*----------------------------------------------------------------------*)
и программа которая устанавливает ету ловушку в системе.
Но в этой ловушки есть один большой минус а именно нельзя узнать регистр клавиш(тоесть большая буква или маленькая) и все которые она
показывает английские.
Как сделать такую ловушку чтоб она более точно определяла нажатую клавишу в и также учитывала раскладку клавиатуры????

Последний раз редактировалось B_N; 10.08.2008 в 02:21.
xshStasX вне форума Ответить с цитированием
Старый 09.08.2008, 16:40   #2
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

Ну с помощью WH_KEYBOARD ты получаешь только виртуальные коды клавиш. А каждый процесс имеет свою клавиатуру - т.е. свою раскладку и свой регистр. Можно конечно решить и эту проблему - но это будет очень сложно. Используй WH_GETMESSAGE.

Код:
Function HookProc(Code:Integer;Wparam:Word;Lparam:Longint): Integer;stdcall;
begin
  if (Code = HC_ACTION) then
  begin
    if PMsg(Lparam)^.message = WM_CHAR then ShowMessage(char(PMsg(Lparam)^.wParam));
  end;
  CallNextHookEx(h,code,Wparam,Lparam);
end;

procedure SetHook;
begin
h:=SetWindowsHookEx(WH_GETMESSAGE,@hookproc,HInstance,0);
end;
бороться и искать
найти и перепрятать.
Minimus вне форума Ответить с цитированием
Старый 11.08.2008, 15:50   #3
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

Код:
 if PMsg(Lparam)^.message = WM_CHAR then ShowMessage(char(PMsg(Lparam)^.wParam));
Что-то мне не нравится это ShowMessage!
бороться и искать
найти и перепрятать.
Minimus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
немного переделать задание braza Паскаль, Turbo Pascal, PascalABC.NET 1 09.05.2008 21:23
Deep Purple - немного о группе. Alar Свободное общение 1 20.09.2007 21:53
надо немного дописать... Acid Помощь студентам 2 21.05.2007 17:32
Помогите немного доделать программку на Дельфях HAMMAN Помощь студентам 7 16.05.2007 23:05
Немного математики Socol Помощь студентам 3 18.02.2007 02:01