type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject) ;
procedure FormDestroy(Sender: TObject) ;
private
function AppHook(var msg: TMessage): boolean;
end;
implementation
procedure TMainForm.FormCreate(Sender: TObject) ;
begin
Application.HookMainWindow(AppHook) ;
end;
function TMainForm.AppHook(var msg: TMessage): boolean;
begin
result := false;
if (msg.Msg = WM_SYSCOMMAND) and (msg.WParam = SC_RESTORE) then
result := MessageDlg('Are you an Admin?', mtWarning, mbYesNo, 0) = mrNo;
end;
procedure TMainForm.FormDestroy(Sender: TObject) ;
begin
Application.UnhookMainWindow(AppHook) ;
end;
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject) ;
procedure FormDestroy(Sender: TObject) ;
private
function AppHook(var msg: TMessage): boolean;
end;
implementation
procedure TMainForm.FormCreate(Sender: TObject) ;
begin
Application.HookMainWindow(AppHook) ;
end;
function TMainForm.AppHook(var msg: TMessage): boolean;
begin
result := false;
if (msg.Msg = WM_SYSCOMMAND) and (msg.WParam = SC_RESTORE) then
result := MessageDlg('Are you an Admin?', mtWarning, mbYesNo, 0) = mrNo;
end;
procedure TMainForm.FormDestroy(Sender: TObject) ;
begin
Application.UnhookMainWindow(AppHook) ;
end;
重载WndProc不能截取SC_RESTORE,用自定义消息(WM_SYSCOMMAND)也不能截取。
本文介绍了一种在Delphi中通过自定义消息处理函数AppHook来尝试拦截窗口还原(SC_RESTORE)消息的方法。但该方法无法成功拦截WM_SYSCOMMAND消息中的SC_RESTORE操作,即使使用了重载WndProc或自定义消息处理也无法实现。

被折叠的 条评论
为什么被折叠?



