1,183
社区成员
发帖
与我相关
我的任务
分享
unit Unit1;
interface
uses windows, SysUtils, Messages;
var
OldHook: HHOOK; //用来保存HOOK的返回值
OldProc: TFarProc; //用来指向窗口消息
HTrayWnd, HReBar: HWND;
function SetHook: Boolean; stdcall; export;
function UnSetHook: Boolean; stdcall; export;
function HookProc(nCode: Integer; {} wParam: WPARAM; {} lParam: LPARAM {}): LRESULT; stdcall; export;
function WinProc(Hwnd, Msg, wParam, lParam: longint): LRESULT; stdcall; export;
implementation
{###################################################################################}
//安装HOOK
function SetHook: Boolean; stdcall;
begin
if OldHook = 0 then
begin
HTrayWnd := FindWindow('Shell_TrayWnd', nil);
HReBar := FindWindowEx(HTrayWnd, 0, 'ReBarWindow32', nil);
OldHook := SetWindowsHookEx(WH_CBT, @HookProc, HInstance, GetWindowThreadProcessId(HReBar, nil));
if OldHook <> 0 then
Result := True;
end
else
Result := False;
end;
{###################################################################################}
//HOOK回调函数
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
begin
HTrayWnd := FindWindow('Shell_TrayWnd', nil);
HReBar := FindWindowEx(HTrayWnd, 0, 'ReBarWindow32', nil);
//OldProc := TFarProc(GetWindowLong(HReBar, GWL_WNDPROC));
// SetWindowLong(HReBar, GWL_WNDPROC, integer(@WinProc));
Result := CallNextHookEx(OldHook, nCode, WParam, lParam); }
end;
{###################################################################################}
//自定义消息处理
function WinProc(Hwnd, Msg, wParam, lParam: longint): LRESULT; stdcall;
begin
Result := 1;
case Msg of
WM_MOVE: begin messagebox(0, 'move', '', 0); exit; end;
WM_WINDOWPOSCHANGING: begin messagebox(0, 'WM_WINDOWPOSCHANGING', '', 0); exit; end;
end;
Result := CallWindowProc(OldProc, Hwnd, Msg, wParam, Longint(@lParam));
end;
function UnSetHook: Boolean; stdcall;
begin
if OldHook <> 0 then
begin
UnHookWindowsHookEx(OldHook);
OldHook := 0;
Result := True;
end
else
Result := False;
end;
end.
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
begin
if OldProc = nil then
begin
HTrayWnd := FindWindow('Shell_TrayWnd', nil);
HReBar := FindWindowEx(HTrayWnd, 0, 'ReBarWindow32', nil);
OldProc := TFarProc(GetWindowLong(HReBar, GWL_WNDPROC));
SetWindowLong(HReBar, GWL_WNDPROC, integer(@WinProc));
end;
Result := CallNextHookEx(OldHook, nCode, WParam, lParam); }
end;