鸟儿博客

天行健,君子以自强不息~ 地势坤,君子以厚德载物~

delphi之钩子函数(三)

钩子链和 CallNextHookEx 的返回值

SetWindowsHookEx 函数的第一个参数表示钩子类型, 共有 14 种选择, 前面我们已经用过两种:
WH_KEYBOARD、WH_MOUSE.

系统会为每一种类型的钩子建立一个表(那就是 14 个表), 譬如某个应用程序启动了键盘钩子, 我们自己的程序也启动了键盘钩子, 同样是键盘钩子就会进入同一个表. 这个表(可能不止一个, 可能还会有鼠标钩子等等)就是传说中的"钩子链".

假如某个钩子链中共进来了三个钩子(譬如是: 钩子A、钩子B、钩子C 依次进来), 最后进来的 "钩子C" 会先执行.

Delphi的编译指令

一个程序从无到有的过程是这样的: 编辑代码 -> 预处理 -> 编译(成dcu等) -> 链接(为exe等).

一、什么是预处理?
譬如 VCL 中有很多代码是兼容 Linux 的, 在 Windows 下就需要在编译之前预处理掉那些 for Linux 的代码.
1、判断操作系统: 其中的 "MSWINDOWS" 和 "LINUX" 就是 Delphi 预定义的 "条件标识符".
[code=delphi]
begin
{$IFDEF MSWINDOWS}
ShowMessage('Windows');

汉字与汉字区位码的转换

一个函数方便在汉字和其区位码之间进行转换。
在没有 Uncode 的时代, 用 256 个 ACSII 只是提供了英文的方法, 其他文字不能使用ASCII。
那时是独立的, 中文就有: GB2312-80(国内简体)、Big5(台湾繁体)、HKSCS(香港繁体), 但它们互不兼容.
GB2312(1980年) 后来升级到 GBK(1995年), 现在电脑上使用的是 GB18030(2000

Delphi之钩子函数(二)

目前对钩子的理解:

譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A;
首先发现这些事件的不是窗口, 而是系统!

然后系统告诉窗口: 喂! 你让人点了, 并且是连续点了两鼠标, 你准备怎么办?
或者是系统告诉窗口: 喂! 有人向你家里扔砖头了, 不信你看看, 那块砖头是 A.

这时窗口的对有些事件会忽略、对有些事件会做出反应:
譬如, 可能对鼠标单击事件忽略, 窗口想: 你单击我不要紧, 累死你我不负责;
但一旦谁要双击我, 我会马上行动, 给你点颜色瞧瞧!
这里窗口准备要采取的行动, 就是我们提前写好的事件.

Delphi之钩子函数

提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中.
[code=delphi]//举例:
SetWindowsHookEx(
idHook: Integer; {钩子类型}
lpfn: TFNHookProc; {函数指针}
hmod: HINST; {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0}
dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}

刷feed订阅工具

想必有人之前看过我的这篇文章:[无耻的刷刷订阅量],时隔N久之后放出这个工具,唯一的功能就是让你在feedsky之类的地方显示出来的订阅总数有所提高,大约增加500个左右,一般使用完后需要1~2天或者更久才能显示出来。订阅量增加是从有道订阅来的,可以自己在feedsky后台查看。

注意:
1.工具仅能帮你增加500个左右的订阅量,重复使用无效。
2.外挂将大大减小你的乐趣,慎用。

分页:[«]1[2][3][4][5][6][»]
« 2010年3月 »
Sun Mon Tue Wed Thu Fri Sat
123456
78910111213
14151617181920
21222324252627
28293031

文章归档

广告位