Использование Microsoft Spy ++ Я вижу, что Notepad ++ получает сообщение WM_SETTEXT при открытии/создании нового документа. Мне нужно связать изменения заголовка в Windows, поэтому я пытаюсь сделать крюк WH_GETMESSAGE и фильтровать только WM_SETTEXT. Но пока я не увенчался успехом. Вот моя DLL:Hook WH_GETMESSAGE и фильтр Только WM_SETTEXT
uses
System.SysUtils,
Windows,
Messages,
System.Classes;
var
CurrentHook: HHOOK;
{$R *.res}
function GetMessageHookProc(Code: Integer; iWParam: WPARAM; iLParam: LPARAM): LRESULT; stdcall;
begin
Result:= CallNextHookEx(CurrentHook, Code, iWParam, iLParam);
if (Code = HC_ACTION) and (PMSG(iLParam).message = wm_settext) then
begin
MessageBox(0, 'WM_SETTEXT', 'WM_SETTEXT', MB_OK);
//this code below is just a prototype to what I will try when this works:
if IntToStr(PMSG(iLParam).lParam) = 'new - Notepad++' then
MessageBox(0, 'Notepad++', 'Notepad++', MB_OK);
end;
end;
procedure SetHook; stdcall;
begin
CurrentHook:= SetWindowsHookEx(WH_GETMESSAGE, @GetMessageHookProc, HInstance, 0);
if CurrentHook <> 0 then
MessageBox(0, 'HOOKED', 'HOOKED', MB_OK);
end;
procedure UnsetHook; stdcall;
begin
UnhookWindowsHookEx(CurrentHook);
end;
exports
SetHook,
UnsetHook;
begin
end.
Я получаю «зацепило» окно сообщения, указывающее, что крюк был решен, но я никогда не получаю сообщение флажок «WM_SETTEXT» внутри, если процедуры обратного вызова. Как я могу фильтровать только этот вид сообщения и проверять строку сообщения?
Спасибо!
Серьезно? Слава богу, я задал этот вопрос, потому что я никогда не понял бы, что происходит ... И странно, я нашел несколько примеров в Интернете, которые показывают WM_SETTEXT с крюком WH_GETMESSAGE. Я не знаю, почему, потому что, анализируя ваши предположения, ни один из них не имеет смысла ... lol! Должен ли я принять этот ответ, или вы хотите сформулировать и пример, используя крючок CALLWNDPROC? – LessStress
Spy ++ показывает вам, когда отправлено зарегистрированное сообщение vs sent. Обратите внимание на его выход. Что касается самого крючка, крюк WH_CALLWNDPROC/RET не сильно отличается от крюка WH_GETMESSAGE в терминах кодирования. Замените 'PMSG' на [' PCWPSTRUCT'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644964.aspx)/['PCWPRETSTRUCT'] (https://msdn.microsoft. com/en-us/library/windows/desktop/ms644963.aspx) и при необходимости используйте поля, связанные с сообщением. Прочтите документацию –
Да, я уже получил это! Спасибо! С наилучшими пожеланиями. – LessStress