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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват нажатия кнопки и подмена значения, в окне чужой программы 
:(
    Опции темы
Keeper89
Дата 23.7.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Конкретно помочь - это весь код написать? 
niteo, в принципе расписал последовательность действий, осталось только поискать примеры.
З.Ы. Кстати с каким приложением идет работа если не секрет?


--------------------
PM MAIL WWW   Вверх
niteo
Дата 23.7.2009, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чуть грубовато, но.. это глобальный хук на мышку и клаву.
По событию, делаешь WindowFromPoint и юзаешь..

Код

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
  msg: PEVENTMSG;
begin
  if Code >= 0 then begin
     result := 0;
     msg := Pointer(LParam);
     with Form1 do
       case msg.message of
         WM_MOUSEMOVE: ;// Двигаем мышой msg.ParamL - это Х msg.ParamH - Это У
         WM_LBUTTONDOWN: ;// Нажали ЛКМ
         WM_LBUTTONUP:   ; // Отпустили ЛКМ
         WM_RBUTTONDOWN: ; // Нажали ПКМ
         WM_RBUTTONUP:   ; // Отпустили ПКМ
         WM_KEYUP:       ;// Отпустили кнопочку
         WM_KEYDOWN:   ;// Нажали кнопочку
       end;
  end else
     result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
  if HookHandle = 0 then
    MessageDlg(IntToStr(GetLastError), mtInformation, [mbOK], 0);
end;



С локальным хуком, чтобы его привязать на какое то не свое приложение, тебе прийдется делать DLL. Весь вышеперечисленный код переносишь в DLL и все...

Код

library MegaHook;
uses
  Windows, Messages;
var
  SysHook: HHook = 0;

function SysMsgProc(Code: Integer; WParam: LongInt; LParam: LongInt): LongInt; stdcall;
begin
  if Code > 0 then
  begin
    ...
  end
  else
    Result := CallNextHookEx(SysHook, Code, WParam, LParam);
end;

procedure Hook(Flag: Boolean); export; stdcall;
begin
  if Flag then
    SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0)
  else
    begin
      UnhookWindowsHookEx(SysHook);
      SysHook:=0;
    end;
end;

exports Hook;

begin
end.



И программа которая юзает dll-ку с хуком
Код


procedure TForm1.Button1Click(Sender: TObject);
var
  Hook: MyProcType;
begin
  HDLL := LoadLibrary(PChar('MegaHook.dll'));
  if HDLL > HINSTANCE_ERROR then
  begin
    @Hook := GetProcAddress(HDLL, 'Hook');
    Hook(True);
  end
  else
    MessageDlg('плохо с DLL.', mtError, [mbIgnore], 0);
end;

procedure TForm1.Button2Click(Sender: TObject);

var
  Hook: MyProcType;
begin
  if HDLL > HINSTANCE_ERROR then
  begin
    @Hook := GetProcAddress(HDLL, 'Hook');
    Hook(False);
  end;
End;


--------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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