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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 20:45   #1
EXTREEM
 
Регистрация: 11.10.2010
Сообщений: 8
По умолчанию Автокликер, или попытка познакомится с Хуками

Здравствуйте уважаемые форумчане, по просьбе знакомого решил написать автокликер, не потому что я могу это сделать лучше других, а просто потому что мне просто нравится что-то писать... нашел пример о глобальных хуках на delphisources, написал dll и сперва се работала, но теперь перестало. Координаты нажатия клавиш должны записываться в файл, но почему-то не записываются, а если вместо этого выводить Message, то окно выскакивает ровно 30 раз, а почему не пойму. Если подход с записью в файл не верный буду не против наводки на более верный подход.

Вот код dll

Код:
library MouseHook;

uses
  Winapi.Windows, Winapi.Messages, System.Classes, System.SysUtils;

var
  H: THandle;
  CursorPos: TPoint;
  X, Y: Integer;
  fCurPos: TFileStream;

  { Hook-функция }
function hook(c0de, wParam, lParam: integer): Lresult; stdcall;
begin
  { Если c0de не меньше 0, все в порядке, продолжаем }
  if c0de >= 0 then
  begin
    case wParam of
      { Если wParam = WM_LBUTTONUP, т.е. нажата левая кнопка мыши, получаем
        координаты курмора и записываем их }
      WM_LBUTTONDOWN:
        begin
          if GetCursorPos(CursorPos) then
          begin
            X := CursorPos.X;
            Y := CursorPos.Y;
            MessageBox(0, PChar('X: '+IntToStr(X)+' Y: '+IntToStr(Y)), nil, 0);
          end
          else
            MessageBox(0, 'Не удалось сохранить координаты курсора', 'Ошибка', MB_ICONERROR);
        end;
    end;
  end
  else
  { Если c0de меньше 0 }
  begin
    { Вызываем следующую ловушку в цепочке ловушек Windows и выходим из процедуры }
    result := CallNextHookEx(H, c0de, wParam, lParam);
    exit;
  end;
  { Вызываем следующую ловушку в цепочке ловушек Windows }
  result := CallNextHookEx(H, c0de, wParam, lParam);
End;

{ Процедура установки ловушки, если не удалось
  установить - выводим сообщение об ошибке }
procedure sethook;
begin
  try
    if Assigned(fCurPos) then
      fCurPos := TFileStream.Create('Position.dat', fmOpenWrite)
    else
      fCurPos := TFileStream.Create('Position.dat', fmCreate);
  except
    On E: Exception do
      MessageBox(0, PChar(E.ClassName + ' поднята ошибка, с сообщением : ' +
        E.Message), 'ERROR', mb_iconhand);
  end;
  H := SetWindowsHookEx(WH_MOUSE, @hook, hInstance, 0);
  if H = 0 then
    MessageBox(0, 'hmmm..', 'ERROR', mb_iconhand);
end;

{ Процедура удаления ловушки }
procedure removehook;
begin
  fCurPos.Free;
  UnhookWindowsHookEx(H);
end;

{ Экспорт процедур установки и удаления hook'a }
exports
  sethook, removehook;

end.
EXTREEM вне форума Ответить с цитированием
Старый 15.02.2013, 14:00   #2
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

а при чём тут хук и автокликер? это всё легко реализуется в indy
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Попытка чтения или записи в защищенную память. zzz6 Общие вопросы C/C++ 2 23.03.2012 20:26
Работа с хуками в C# Radical_Edward C# (си шарп) 6 18.10.2010 16:33
(C++) Работа с Win API, ХУКАМИ. stribogaaa Общие вопросы C/C++ 10 12.05.2010 18:12
Немогу разобраться с хуками! Altera Win Api 12 14.12.2008 17:15