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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2009, 12:02   #11
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Сначала послать в поиск хотел, а потом моя доброта душевная мне как скажет: "Назвался гомо, подставляй зад... И это я тебе еще мягко сказала!!" )))
Посмеялись, и хватит. ) В общем, вот тебе текст преславутой Dll:
Код:
library Lib;

uses
  SysUtils,
  Classes,
  Windows,
  Dialogs;
//Для того, чтобы не подключать модуль Messages добавляем нужные константы
const
  {$EXTERNALSYM WM_KEYDOWN}
  WM_KEYDOWN          = $0100;
  {$EXTERNALSYM WM_KEYUP}
  WM_KEYUP            = $0101;
  {$EXTERNALSYM WM_SYSKEYDOWN}
  WM_SYSKEYDOWN       = $0104;
  {$EXTERNALSYM WM_SYSKEYUP}
  WM_SYSKEYUP         = $0105;

{$R *.res}

procedure MyHook(nCode: integer; WPARAM: wParam; LPARAM: lParam); stdcall; export;
begin
  if nCode=HC_ACTION then
  begin
    case WPARAM of
      WM_KEYDOWN: ShowMessage('WM_KEYDOWN');
      WM_KEYUP: ShowMessage('WM_KEYUP');
      WM_SYSKEYDOWN: ShowMessage('WM_SYSKEYDOWN');
      WM_SYSKEYUP: ShowMessage('WM_SYSKEYUP');
    end
  end;
end;

Exports MyHook;

begin
end.
Убей Dialogs, когда уберешь ShowMessages - весить Dll будет меньше...
И желанная реализация:
Код:
var
  Form1: TForm1;
  DoHookActn: procedure(nCode: integer; WPARAM: wParam; LPARAM: lParam);

const
  {$EXTERNALSYM WH_KEYBOARD_LL}
  WH_KEYBOARD_LL = 13;
  {$EXTERNALSYM WH_MOUSE_LL}
  WH_MOUSE_LL = 14;

implementation

{$R *.dfm}
var
  TID: Cardinal = 0;
  DllHndl: THandle;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if TID=0 then
  begin
    @DoHookActn:=nil;
    DllHndl:=LoadLibrary('Lib.dll');

    if DllHndl >= 32 then
    begin
      @DoHookActn:= GetProcAddress(DllHndl,'MyHook');
      if @DoHookActn<>nil then
        TID:=SetWindowsHookEx(WH_KEYBOARD_LL,@DoHookActn,DllHndl,0)
      else ShowMessage('What do you mean, my master?!!');
    end
    else ShowMessage('Library not loaded (((');

    ShowMessage(Inttostr(GetLastError));
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Button2Click(self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if TID<>0 then
    UnhookWindowsHookEx(TID);
  @DoHookActn:=nil;
  FreeLibrary(DllHndl);
end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 20.09.2009, 13:04   #12
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

Сделал все выше написанное, вылетел с ошибкой:



что не так? как лечить?
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Старый 20.09.2009, 21:46   #13
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Странно, у меня прелестно все прошло... На какой строке выдает ошибку? Какая версия Delphi?
Если что - пиши, исходники вышлю... Посмотрим, как пройдет.
P.S. Окошечки, смотрю, от висты... Я на XP компилил - может в этом загвоздка... Но все равно, если ошибку не найдешь - пиши, я тебе исходники кину...
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 20.09.2009 в 21:50.
SuperVisor вне форума Ответить с цитированием
Старый 21.09.2009, 10:06   #14
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

Система ХР, делфи 7. Скинь если не сложно исходники, буду очень благодарен!
эта ошибка появляется при компиляции, т.е. как таково компилирует он нормально, но при запуске программы вылетает эта ошибка!
http://FuckAV.ru
Блокирующая система - Itsprayda System

Последний раз редактировалось CyberDemon324; 21.09.2009 в 10:10.
CyberDemon324 вне форума Ответить с цитированием
Старый 21.09.2009, 17:33   #15
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Довольно-таки странно... У меня семерки нет - BDS 2005. И на XP, и на Vista , и на Se7en - все работает прелестно.
Прикрепляю исходники - семерка должна съесть...
Уважаемые гуру: есть у кого семерочка потестить? =))

To CyberDemon324:
1. Путь к библиотеке и имя ее - верные?
2. Компоненты сторонние используешь? Попробуй убрать константы в проекте приложения.
Вложения
Тип файла: zip SystemHook.zip (858.0 Кб, 11 просмотров)
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 22.09.2009, 11:53   #16
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

угу, по исходнику понял, что при нажатии той или иной клавиши, вылазиет сообщение! а мне нужно что бы клавиши были не автивны, это key:=0 ???
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Старый 22.09.2009, 12:01   #17
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Этот вопрс уже обсуждался в теме, на которую я ссылался. Тебе необходимо играть с записью lparam
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячие клавиши Altera Общие вопросы Delphi 5 13.09.2008 21:27
Горячие клавиши VS 2008 .:KOLYAN:. Свободное общение 2 02.09.2008 14:32
Горячие клавиши назначенные для макросов Word Glad Microsoft Office Word 0 05.10.2007 20:29
По нажатию, каких сочетаний клавиш можно программно развернуть приложение, если оно свернуто в трее? Johnny_B Win Api 1 04.06.2007 08:20