gpt4 book ai didi

delphi - 仅 Hook WH_GETMESSAGE 并过滤 WM_SETTEXT

转载 作者:行者123 更新时间:2023-12-03 15:51:46 32 4
gpt4 key购买 nike

使用 Microsoft Spy++,当您打开/创建新文档时,我看到 Notepad++ 收到 WM_SETTEXT 消息。我需要在 Windows 上 Hook 标题更改,因此我尝试执行 WH_GETMESSAGE Hook ,并仅过滤 WM_SETTEXT。但到目前为止我还没有成功。这是我的 DLL:

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.

我收到“HOOKED”消息框,表明 Hook 已解决,但我从未在回调过程的 if 中收到“WM_SETTEXT”消息框。如何只过滤这种消息,并检查消息的字符串?

谢谢!

最佳答案

WM_SETTEXT已发送消息,而不是已发布消息。 WH_GETMESSAGE Hook 只能看到发布到目标线程消息队列的消息,因此它永远不会看到WM_SETTEXT 消息。要 Hook 直接发送到窗口而不通过消息队列的消息,您需要使用 WH_CALLWNDPROCWH_CALLWNDPROCRET Hook 。

关于delphi - 仅 Hook WH_GETMESSAGE 并过滤 WM_SETTEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35487224/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com