Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как перехватывать сообщения заменяя буквы в люб... Hook клавы, замена текста в люб. актив.. 
:(
    Опции темы
virtul
  Дата 3.2.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Люди!
Такое дело:
У меня проблема с прогой.
Мне нужно сделать прогу для перехвата системных сообщений клавиатуы.
короче я использую прогу и биб.dll
---------------------
прога:
Код

...
var
  PSSKDNRN: TPSSKDNRN;
  procedure PSSKDNRN_RSHook(State : Boolean) stdcall;
  external 'psskdnrn.dll' index 1;


implementation

{$R *.dfm}

procedure TPSSKDNRN.FormShow(Sender: TObject);
begin
  PSSKDNRN_RSHook(true);
end;

procedure TPSSKDNRN.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  PSSKDNRN_RSHook(false);
end;

procedure TPSSKDNRN.FormActivate(Sender: TObject);
begin
  ShowWindow(Handle,SW_HIDE);
  ShowWindow(Application.Handle,SW_HIDE);
end;
end.

---------------------
Библиотека Dll
Код

library psskdnrn;

uses Windows, Messages;
var
  SysHook : HHook = 0;
  Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
CallNextHookEx(SysHook, Code, wParam, lParam);
if code = HC_ACTION then
begin
  Wnd := TMsg(Pointer(lParam)^).hwnd;
   if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
  if ((TMsg(Pointer(lParam)^).wParam and ord('A')) = ord('A')) then
  begin
...//как поменят мессаге допустим вводим букву А, а вместо неё получаем Ф(в люом октивном окне где пишем)
    InvalidateRect(Wnd, nil, true);
    end;
  end;
end;

procedure PSSKDNRN_RSHook(State : Boolean) export; stdcall;
begin
  if State=true then
begin
  SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
end
else
begin
  UnhookWindowsHookEx(SysHook);
  SysHook := 0;
end;
end;
exports PSSKDNRN_RSHook index 1;
end.

----------------------
можешь помочь с function SysMsgProc
Я не знаю как перехватить сообщение допустим с буквой 'A' чтобы место неё в люом окне вводилось допустим 'Ф'.
я думал может в ord переводить но эфекта небыло.
Может вместо SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0); надо SysHook := SetWindowsHookEx(wh_Keyboard, @Key_Hook, HInstance, 0);
но чё при это надо?
Я не хочу заменять сообщения.
Мне чё надо:
Человек врубил комп, он на анг раскладке(hook включён), пишет в любом окне, в любом текстовом поле := privet 
а выходило := привет
и ещё: как в любом окне, текстовом поле удалять программно по одному символу при нажатии допустим буквы Y
Кто может помочь?

PM MAIL WWW   Вверх
virtul
Дата 6.2.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Ну хоть кто нибудь может помочь?  smile 
PM MAIL WWW   Вверх
dumb
Дата 6.2.2009, 13:12 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(virtul @  6.2.2009,  11:49 Найти цитируемый пост)
Ну хоть кто нибудь может помочь?
с учетом той бессмысленной каши, что у тебя написана в коде, тебе поможет, для начала, любая добротная книга по программированию на Delphi.
PM MAIL   Вверх
virtul
Дата 6.2.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Цитата

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

^^^^^^
Чтобы так с кем то говорить нужно хотябы пред-историю знать(или для начала хотябы человека)!
Во первых:
Я искал везде, и в книгах, и в нете.
но несказано негде как заменять через сообщения текст в любой проге.
Во вторых:
Код хука я взял из одной книги.
он заменял звёзды в поле ввода пароля на символы(открывет пароль).
Я поэтому и спрашиваю.

------------------------------------------------------------------------------------------------

M
Rrader
Предыстория, говоришь...Так она в первом посте вся - "скопипащенный" невесть откуда код (там как минимум 10 грубых ошибок) неизвестно для каких целей. Как бы то ни было, dumb дал исчерпывающий ответ на твой вопрос.


Тема закрывается.

Это сообщение отредактировал(а) Rrader - 6.2.2009, 21:22
PM MAIL WWW   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0896 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.