Delphi不用DLL方式拦截全局外壳程序(Shell application)消息
来源:互联网 发布:.net core 2.0 ubuntu 编辑:程序博客网 时间:2024/04/30 01:44
拦截全局外壳程序窗体消息,一般都要用DLL创建WH_SHELL钩子,但有个非公开的API函数RegisterShellHookWindow,绑定一个handle句柄,然后注册SHELLHOOK消息后,就可以在handle句柄消息处理的过程中处理以下wParam值
HSHELL_WINDOWCREATED = $0001; // 系统级的窗体被创建
HSHELL_WINDOWDESTROYED = $0002; // 系统级的窗体即将被关闭
HSHELL_ACTIVATESHELLWINDOW = $0003; // SHELL 的主窗体将被激活
//HSHELL_WINDOWACTIVATED = $0004; // 系统级的窗体被激活
HSHELL_GETMINRECT = $0005; // 窗体被最大化或最小化
HSHELL_REDRAW = $0006; // Windows 任务栏被刷新
HSHELL_TASKMAN = $0007; // 任务列表的内容被选中
HSHELL_LANGUAGE = $0008; // 中英文切换或输入法切换
实例如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
end;
Function RegisterShellHookWindow(HWND: LongWord): Integer; stdcall;
external 'User32.dll' Name 'RegisterShellHookWindow';
var
Form1: TForm1;
Msg_ID: Cardinal;
implementation
{$R *.dfm}
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if msg.message=msg_id then
if msg.wParam=HSHELL_windowactivated then
begin
//msg.LParam为激活窗口句柄
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Msg_ID := RegisterWindowMessage('SHELLHOOK');
RegisterShellHookWindow(application.Handle);
application.OnMessage:=self.AppMessage;
end;
- Delphi不用DLL方式拦截全局外壳程序(Shell application)消息
- 外壳模式(shell)
- 操作系统外壳(shell)
- Delphi Dll 消息处理 Dll (3)
- 如何调试Windows外壳扩展程序(Shell Extension)
- Delphi Windows 外壳(1)
- 安装全局消息钩子实现dll窗体程序注入
- 再谈Delphi关机消息拦截 -- 之控制台程序 SetConsoleCtrlHandler
- delphi程序全局快捷键
- C#拦截系统消息的方法Application.AddMessageFilter(转)
- Delphi Windows 外壳编程(2)
- Delphi COM 外壳编程(3)
- Delphi中如何拦截键盘消息
- 操作系统外壳(SHELL)对象
- delphi程序全局热键的自定义方法
- 给Delphi程序(exe,dll)添加版本信息
- 给Delphi程序(exe,dll)添加版本信息
- Delphi编写windows外壳扩展
- [记忆] 在Android层实现触摸屏校验
- 迷宫类
- 未来属于生物计算
- [记忆] Tslib Manual Calibrate On Android
- 再论ubuntu 开机跳出“解锁密钥环”解决办法
- Delphi不用DLL方式拦截全局外壳程序(Shell application)消息
- 如果已经知道某一CALL的具体作用,能否把后面所有相同的CALL都改成函数名形式?
- 不要忘记当初的梦想
- 杨辉三角--我的面试题
- Android double framebuffer(how to set)
- SQL2000 中6个默认数据库的作用
- 面试过啦~~
- 腾讯微博邀请码
- SQL2000 中6个默认数据库的作用