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