M
mincom
Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何屏蔽别人程序的最小化消息,已下代码可以拦截到calc.exe程序点击最小化
的消息,但是我想把此消息屏蔽掉,也就是说点击标题栏的最小化按钮后,对方的程序
没有任何反应(不执行最小化的功能),请问以下的代码该如何改进?
注意:我要屏蔽的是别人的程序最小化消息,而不是自己的程序。(calc.exe是系统自带的计算器)
function CallWndProc(nCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT;
stdcall;
begin
if nCode = HC_ACTION then
begin
//点击标题栏的最小化按钮后,拦截到以下消息
if PCWPStruct(lParam)^.message = wm_syscommand then
if PCWPStruct(lParam)^.wParam = sc_minimize then
//拦截到最小化消息了
if pos('calc.exe', paramstr(0)) <> 0 then
//确认此消息来自calc.exe进程
begin
PCWPStruct(lParam)^.lParam := WM_NULL;
//屏蔽掉该消息
MessageBeep(64);
//可以听到声音,但是程序依然被最小化了
end;
end;
Result := CallNextHookEx(WndProcHook, nCode, wParam, lParam);
end;
procedure HookOn();
begin
WndProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);
end;
procedure HookOff();
begin
UnHookWindowsHookEx(WndProcHook);
end;
的消息,但是我想把此消息屏蔽掉,也就是说点击标题栏的最小化按钮后,对方的程序
没有任何反应(不执行最小化的功能),请问以下的代码该如何改进?
注意:我要屏蔽的是别人的程序最小化消息,而不是自己的程序。(calc.exe是系统自带的计算器)
function CallWndProc(nCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT;
stdcall;
begin
if nCode = HC_ACTION then
begin
//点击标题栏的最小化按钮后,拦截到以下消息
if PCWPStruct(lParam)^.message = wm_syscommand then
if PCWPStruct(lParam)^.wParam = sc_minimize then
//拦截到最小化消息了
if pos('calc.exe', paramstr(0)) <> 0 then
//确认此消息来自calc.exe进程
begin
PCWPStruct(lParam)^.lParam := WM_NULL;
//屏蔽掉该消息
MessageBeep(64);
//可以听到声音,但是程序依然被最小化了
end;
end;
Result := CallNextHookEx(WndProcHook, nCode, wParam, lParam);
end;
procedure HookOn();
begin
WndProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);
end;
procedure HookOff();
begin
UnHookWindowsHookEx(WndProcHook);
end;