![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Локальный хук на WM_SETTEXT
Arc © (2005-07-17 12:39:00)Не могу поставить локальный хук на это сообщение. Как только не делал, не получается.
Код:
SetLocalHook(WH_GETMESSAGE, @DoSetTextHook, FArcSetTextHook);
procedure TArcLocalizator.SetLocalHook(idHook: Integer; lpfn: TFNHookProc; var HookHandle: HHook);
var
ThreadId: Cardinal;
begin
//Set hook for dinamically created
ThreadId := GetCurrentThreadId;
if ThreadId <> 0 then
begin
HookHandle := SetWindowsHookEx(idHook, lpfn, 0, ThreadId);
if HookHandle = 0 then
raise Exception.Create('Can''t add function to a localization hook');
end
else
raise Exception.Create('Can''t get current thread id to a localization hook');
end;
function DoSetTextHook(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
var
PACH: PAnsiChar;
s: String;
begin
if TWMSetText(Pointer(lparam)^).msg = WM_SETTEXT then
begin
// Вот сюда я попасть ну ни как не могу, что бы я не делал с lparam
// Some Code
end;
// Для целей мониторинга:
ArcLocSelf.FIniFile.WriteString('Other', IntToStr(lparam), s);
Result := CallNextHookEx(ArcLocSelf.FArcSetTextHook, Code, wParam, LPARAM);
end;
alpet (2005-07-18 19:36:00) [1]Если хук установился - нужно для "попадания" дождаться появления сообщения WM_SETTEXT в очереди твоего потока. Только вот врядли это возможно - как замечено в [3] это сообщение передается прямиком оконной процедуре.
Docent (2005-07-18 19:15:00) [2]Может я что-то не правильно понял.
Но ты же вроде как хочешь установить хук на WM_SETTEXT.
А WM_SETTEXT это параметр ф-н SendMessage.
Так почему ты ставишь хук на WH_GETMESSAGE?
Тебе по идее надо ставить хук на ф-н SendMessage тоесть на
WH_CALLWNDPROC...
Digitman (2005-07-18 18:00:00) [3]
> Вот сюда я попасть ну ни как не могу
а куда "попадаешь" ? в смысле - ранее по тексту ?
(2005-07-17 16:55:00) [4]Удалено модератором