Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
ВнизНе могу разобраться с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c