Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.26;
Скачать: CL | DM;

Вниз

Не могу разобраться с DLL   Найти похожие ветки 

 
Алексей Гость   (2011-03-17 19:15) [0]

Проблема следующая:
нигде не могу найти описания для работы с dll кодом...
Конкретнее:
Есть dll, его суть - перехватить нажатие клавиши Space и по данному событию закрыть окно моей проги (в лучшем случае в моей проге установить флажок в Checked)

Листинг dll следующий:


library Hook;// имя библиотеки

uses
Windows;

var
MyHookHandle:HHook = 0;
h:hWnd;

function MyCoolHook(Code: integer; wParam: word; lParam: Longint):LongInt;stdCall;
begin
if code<0 then Result := CallNextHookEx(MyHookHandle,Code, wParam, lParam)
else//проверка, какая кнопка нажата
begin
if wParam = VK_Space then
begin
 h:=FindWindow(nil,"Program1"); //здесь название окна
 if h=0 then exit; // если таких окон нет то выход из процедуры
 SendMessage(h,WM_DESTROY,0,0); //приказать окну: СДОХНИ!
end;
CallNextHookEx(MyHookHandle,Code, wParam, lParam)
//вызываю следующую ловушку
end;{if}

end;

procedure SetHook;stdCall;Export;
begin
MyHookHandle := SetWindowsHookEx(WH_Keyboard, @MyCoolHook, hInstance, 0);
//устанавливаю хук
end;

procedure UnHook;stdCall;Export;
begin
UnhookWindowsHookEx(MyHookHandle);//снимаю хук
end;

exports//экспортирую функции
SetHook,
Unhook;

Begin
SetHook;//устанавливаю ловушку
end.



Ругается на WM_DESTROY.

Где можно поискать аналоги WM_DESTROY, BM_CLICK и т.д Применяемые для написания dll.


 
Rouse_ ©   (2011-03-17 20:34) [1]

Не читайте книжки Фленова, тогда вас не озарит откровение что wParam имеет тип word.
Этот код работать не будет.
Ну а во вторых uses Messages


 
Алексей Гость   (2011-03-17 20:54) [2]

Ок. Попробуем иначе.


 
Алексей Гость   (2011-03-17 21:39) [3]

Кому интересно реализовал следующим образом.


...
 private
   procedure F1(var Message:TMessage);message WM_HOTKEY;
...
const
 VK_ESCAPE = $1B;

implementation
...
procedure TForm1.F1(var Message:TMessage);
begin
 Form1.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, 0, 0, VK_ESCAPE);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnRegisterHotKey(Handle,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Visible := False;
end;
...
end.



 
Leonid Troyanovsky ©   (2011-03-17 22:43) [4]


> Алексей Гость   (17.03.11 21:39) [3]

> Кому интересно реализовал следующим образом.

Интересна трансформация Space -> Esc.
Умиляет скурпулезность: VK_ESCAPE = $1B.

Впрочем, бодрит сам замысел объявления подобных гор-клавишь.

За Form1. - пожизненный эцих с гвоздями.
Как, впрочем, и за inherited.

Ну, а тема WM_DESTROY, BM_CLICK и т.д Применяемые для -
осталась нераскрытой.

--
Regards, LVT.


 
Сергей М. ©   (2011-03-18 09:49) [5]

> dll, его суть - перехватить нажатие клавиши Space

dll для этого нафих не нужна.
Хук WH_LL_KEYBOARD расчудесно отслеживает нажатия клавиш и при этом не требует чтобы его поселили жить именно в dll.


 
Cobalt ©   (2011-03-18 12:31) [6]

Кстати, я правильно понимаю, что не вызов CallNextHookEx(MyHookHandle,Code, wParam, lParam) пошлет пламенный привет только тем прогам, которые поставили ловушки до запущенной программы?


 
Cobalt ©   (2011-03-18 12:32) [7]

т.е. "которые поставили ловушки после запущенной программы?"



Страницы: 1 вся ветка

Текущий архив: 2011.06.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1300783231
novichek
2011-03-22 11:40
2011.06.26
EXISTS или IN


2-1300363050
petrovich
2011-03-17 14:57
2011.06.26
вести логи действий


15-1299752993
Юрий
2011-03-10 13:29
2011.06.26
С днем рождения ! 7 марта 2011 понедельник


2-1299153217
Soulofangel
2011-03-03 14:53
2011.06.26
реализовать работу устройства "Автоматический выключатель"


2-1300378553
Алексей Гость
2011-03-17 19:15
2011.06.26
Не могу разобраться с DLL