Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу разобраться с DLL [D7, WinXP]


Алексей Гость ©   (2011-03-17 19:15:00) 

Проблема следующая:
нигде не могу найти описания для работы с 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.


Cobalt   (2011-03-18 12:32:00) [1]

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


Cobalt   (2011-03-18 12:31:00) [2]

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


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

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

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


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


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

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

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

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

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

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

--
Regards, LVT.


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

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


...
 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.


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

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


Rouse_   (2011-03-17 20:34:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо