3
使用Microsoft Spy ++我看到Notepad ++收到WM_SETTEXT消息,当您打开/创建一个新文档。我需要在Windows上挂钩标题更改,因此我正在尝试执行WH_GETMESSAGE挂钩,并且仅筛选WM_SETTEXT。但到目前为止我没有成功。这里是我的DLL:钩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”消息框。我怎样才能过滤这种消息,并检查消息的字符串?
谢谢!
认真吗?感谢上帝我做了这个问题,因为我永远不会知道发生了什么......奇怪的是,我在Internet上找到了一些用WH_GETMESSAGE钩子显示WM_SETTEXT的例子。我不知道为什么,因为分析你的假设,没有一个是合理的......大声笑!我应该接受这个答案,还是想用CALLWNDPROC钩子来制定和举例? – LessStress
Spy ++显示记录的消息发送与发送的时间。注意它的输出。至于钩子本身,在编码方面,WH_CALLWNDPROC/RET钩子与WH_GETMESSAGE钩子没有什么不同。用['PCWPSTRUCT']替换'PMSG'(https://msdn.microsoft.com/en-us/library/windows/desktop/ms644964.aspx)/ ['PCWPRETSTRUCT'](https://msdn.microsoft。 com/en-us/library/windows/desktop/ms644963.aspx)并根据需要使用其消息相关字段。阅读文档 –
是的男人,我已经得到它的工作!谢谢!最好的祝愿。 – LessStress