Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi

Автор: mutmut
Дата сообщения: 28.03.2006 06:09
Jokerjar
Блин нету имени у этих объектов
А можно с хуком по подробней...
Автор: Jokerjar
Дата сообщения: 28.03.2006 06:44
WH_GETMESSAGE - глобальная ловушка, которая находится в dll и перехватывает все сообщения в системе. Самый простой вариант - пишешь программу, на ней 2 кнопки

Код: procedure Hook(Flag: Boolean); stdcall; external "Hook.dll"
............
Procedure Button1Click //Установить ловушку
begin
Hook(True);
end;

Procedure Button2Click //Удалить ловушку
begin
Hook(False);
end;
............
Автор: mutmut
Дата сообщения: 28.03.2006 07:17

Цитата:
SysHook:=SetWindowsHookEx(WH_GetMessage,@SysMsgProc,HInstance,0)
Else
Begin
UnhookWindowsHookEx(SysHook);
SysHook:=0;

А какой тип у переменной и на что указатель?
Автор: Jokerjar
Дата сообщения: 28.03.2006 07:25

Цитата:
А какой тип у переменной и на что указатель?

Здесь указывается процедура перехвата, т.е. в нашем случае - @GlobalKeyBoardHook


Добавлено:
Немного неудачное название процедуры, это для перехвата сообщений клавиатуры... Но названия в принципе роли не играют, это все компромис!
Автор: mutmut
Дата сообщения: 28.03.2006 07:38
Jokerjar
А переменную SysHook как определить? Насколько я понял тип у неё HHook. Ругается что не определено host application.
Автор: Jokerjar
Дата сообщения: 28.03.2006 07:48

Код: var
CurrentHook: HHook;
Автор: mutmut
Дата сообщения: 28.03.2006 07:55
Jokerjar
Всё равно при компиляции пищет что не определено host application идите в run|parametrs и укажите, а что там указывать?
Автор: Jokerjar
Дата сообщения: 28.03.2006 08:04
Ты скорей всего пишешь не dll а обычное приложение. Файл -> Создать -> Другое -> Мастер DLL (Если память не изменяет). У dll начало кода - это не PROGRAM а LIBRARY. После компиляции в папке с соурсами должен появиться файл с расширением dll. Кидаешь его в папку с программой (та, что с двумя кнопками) и запускаешь ее (пргграмму). Пробуй!
Автор: mutmut
Дата сообщения: 28.03.2006 08:08
Jokerjar
Пишу именно длл. Где то не тут копать надо. У меня ругался на {$R *.res}, я заремарил стал говорить, то что выше писал.
Автор: Jokerjar
Дата сообщения: 28.03.2006 08:12
Хммм... Можешь выложить весь текст длл?
Автор: mutmut
Дата сообщения: 28.03.2006 08:18
Jokerjar

Цитата:
library Hooks;
uses
Windows, Messages, SysUtils, Variants, Classes,
Dialogs, StdCtrls, ExtCtrls,ShellApi;

//{$R *.res}

var
SysHook: HHook;
wnd: hwnd;
function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
begin
if code<0 then begin
GlobalKeyBoardHook:=CallNextHookEx(SysHook,code,wParam,lparam);
Exit;
end;
Wnd:=Tmsg(Pointer(Lparam)^).hwnd;
if Tmsg(Pointer(Lparam)^).message=wm_lbuttondown then
begin
end;
CallNextHookEx(SysHook,code,wParam,lparam);
GlobalKeyBoardHook:=0;
Exit;
end;

procedure Hook(Flag:Boolean); stdcall;
Begin
IF Flag then
SysHook:=SetWindowsHookEx(WH_GetMessage,@GlobalKeyBoardHook,HInstance,0)
Else
Begin
UnhookWindowsHookEx(SysHook);
SysHook:=0;
End;
End;

exports Hook;

begin
end.

Вотс.
Автор: Jokerjar
Дата сообщения: 28.03.2006 08:27
А! Ну dll'ка появилась в папке? По идее должна, а на это сообщение забить можно.

Код: uses
Windows, Messages, SysUtils;
Автор: mutmut
Дата сообщения: 28.03.2006 08:48
Jokerjar
Нда.. смотрел же не увидел, да всё ок. Теперь другая проблема

Код:
procedure Hook(Flag: Boolean); stdcall; external 'Hook.dll' name 'Hook';
еще
вот так пробовал
procedure Hook(Flag: Boolean); stdcall; external 'Hook.dll';
Автор: Jokerjar
Дата сообщения: 28.03.2006 08:54

Код: procedure Hook(Flag: Boolean); stdcall; external 'Hook.dll';
Автор: mutmut
Дата сообщения: 28.03.2006 09:20
Jokerjar
ООО чудо Знания сила!!
А подскажи ещё как мне теперь за место бипа получить в мессаджбохе или подобной штуке вот эти значения Wnd, Wparam, Lparam.
Автор: Jokerjar
Дата сообщения: 28.03.2006 09:31
Можно конечно и в мессажбоксе, но будет неудобно, так как он будет вылазить при каждом нажатии левой кнопкой и ты его попросту не закроешь. Лучше замутить что-нить другое. Например, запись в файл... А узнать эти значения так:

Код: if Tmsg(Pointer(Lparam)^).message=wm_lbuttondown then
begin
Tmsg(Pointer(Lparam)^).wParam;
Tmsg(Pointer(Lparam)^).lParam;
Tmsg(Pointer(Lparam)^).hwnd;
end;
Автор: Olezka
Дата сообщения: 28.03.2006 09:42
OdesitVadim
А где именно эта закладка
Автор: OdesitVadim
Дата сообщения: 28.03.2006 10:18
Olezka

Цитата:
А где именно эта закладка

Это не закладка, а TFileStream - не компонент, а класс.
нужно в uses добавить Classes
Автор: EZH
Дата сообщения: 28.03.2006 10:20
Olezka
TFileStream это не компонент, а класс, так что создавать его нужно вручную в коде программы.
http://www.yaguo.ru/InfoDelphi/Delphi_for_%20professionals/Glava9/Index10.html
Автор: Olezka
Дата сообщения: 28.03.2006 10:37
OdesitVadim
EZH
Все въехал спасиба
Автор: Jokerjar
Дата сообщения: 28.03.2006 10:53
Вот и у меня появилась проблема. Как можно таймер засунуть в отдельный поток? (Только цикл не предлагайте, мне нужен именно тацмер)
Автор: vshersh
Дата сообщения: 28.03.2006 10:56
Jokerjar
Может тебе нужен TRxTimer ?
Автор: Jokerjar
Дата сообщения: 28.03.2006 11:06
Насколько я знаю он не в отдельном потоке работает
Автор: vshersh
Дата сообщения: 28.03.2006 11:16
Насколько я знаю... Ты ошибаешься
Автор: Jokerjar
Дата сообщения: 28.03.2006 11:24
Погоди, RxTimerList да?
Автор: RostY
Дата сообщения: 28.03.2006 11:30
Jokerjar
Попробуй TThreadTimer _http://www.silicmdr.com/Freeware.htm
и здесь посмотри, может что-то интересное найдешь
_http://bdn.borland.com/borcon2004/article/paper/0,1963,32225,00.html#TimerThreads
Автор: vshersh
Дата сообщения: 28.03.2006 11:32
Jokerjar
Не...

Компонент TRxTimer (RxTimer.pas) -- там в нем живет поток, который собственно и выполняет функции таймера.
Извините за тавтологию

Добавлено:
Только что посмотрел -- похоже, этот компонент не регистрируется в палитре! Т.е. надо его создавать руками.
TRxTimer - как бы вспомогательный компонент, который юзается внутри библиотеки
Автор: Pinocchio
Дата сообщения: 28.03.2006 12:52
А как большоое меню сделать делимым автоматически?
Автор: LordMAD
Дата сообщения: 28.03.2006 12:59
Pinocchio

Цитата:
А как большоое меню сделать делимым автоматически?

Делимым на что?
Автор: mutmut
Дата сообщения: 28.03.2006 14:21
Jokerjar
Не работает.
Вот так допустим делаю.

Код:
sendmessage(197434, wm_lbuttondown,1,5112064)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.