易截截图软件、单文件、免安装、纯绿色、仅160KB

读书 Delphi下深入Windows核心编程 第二天

技术交流,DH讲解. 今天进入这书第二章 钩子(HOOK).
先说说钩子是什么?
钩子其实就在你环境中加上一层过滤,在特殊情况下就触发钩子回调函数.
比如说我们安装了全局的键盘钩子,那么当我们按动键盘上面的键的时候,钩子的回调函数就会触发.
我们也能看到本来是直来直往的,结果现在中间安装了一层过滤,系统的效率肯定会有所下降的.
要了解,我们只需要知道3个函数:
1 上钩函数: function SetWindowsHookEx(
idHook: Integer;//钩子的类型
lpfn: TFNHookProc; //回调函数指针
hmod: HINST; //一般为0或者Instance
dwThreadId: DWORD//全局钩子就为0,不然就为指定进程id
): HHOOK; stdcall;//成功就返回一个值,不成功就为0
其中钩子类型有:
{$EXTERNALSYM WH_MIN}
WH_MIN = -1;
{$EXTERNALSYM WH_MSGFILTER}
WH_MSGFILTER = -1;
{$EXTERNALSYM WH_JOURNALRECORD}
WH_JOURNALRECORD = 0;
{$EXTERNALSYM WH_JOURNALPLAYBACK}
WH_JOURNALPLAYBACK = 1;
{$EXTERNALSYM WH_KEYBOARD}
WH_KEYBOARD = 2;
{$EXTERNALSYM WH_GETMESSAGE}
WH_GETMESSAGE = 3;
{$EXTERNALSYM WH_CALLWNDPROC}
WH_CALLWNDPROC = 4;
{$EXTERNALSYM WH_CBT}
WH_CBT = 5;
{$EXTERNALSYM WH_SYSMSGFILTER}
WH_SYSMSGFILTER = 6;
{$EXTERNALSYM WH_MOUSE}
WH_MOUSE = 7;
{$EXTERNALSYM WH_HARDWARE}
WH_HARDWARE = 8;
{$EXTERNALSYM WH_DEBUG}
WH_DEBUG = 9;
{$EXTERNALSYM WH_SHELL}
WH_SHELL = 10;
{$EXTERNALSYM WH_FOREGROUNDIDLE}
WH_FOREGROUNDIDLE = 11;
{$EXTERNALSYM WH_CALLWNDPROCRET}
WH_CALLWNDPROCRET = 12;
{$EXTERNALSYM WH_KEYBOARD_LL}
WH_KEYBOARD_LL = 13;
{$EXTERNALSYM WH_MOUSE_LL}
WH_MOUSE_LL = 14;
{$EXTERNALSYM WH_MAX}
WH_MAX = 14;
{$EXTERNALSYM WH_MINHOOK}
WH_MINHOOK = WH_MIN;
{$EXTERNALSYM WH_MAXHOOK}
WH_MAXHOOK = WH_MAX;
具体作用基本上就看名字就知道,个别的我也不知道,具体的大家看MSDN吧.这个是个葵花宝典.

2 卸钩函数:
function UnhookWindowsHookEx(
hhk: HHOOK//上钩函数返回的句柄
): BOOL; stdcall;
3 具体的钩子回调函数:
TFNHookProc = function (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
好的说了这么多,看例子:


相关文档:

Delphi 发布ActiveX控件 数字签名(转)

原作者:光明兄弟
最近我正在研究ActiveX技术。我使用Delphi 7创建了一个具有ActiveForm的ActiveX控件应用程序。这个控件产生一个.OCX文件。现在,我需要把这个控件部署在服务器端,在用户浏览网页并选择安装这个控件的时候,用户的IE才会下载、安装并显示这个控件。
但是我的控件必须作数字签名以后,IE才会下载安装。 ......

关于delphi Move函数的用法详解

  使用delphi多年,前些天忽然遇到不会string转pbyte,很是失落,此时对于编程基本功的重要性深有体会.这其中用到MOVE函数.
 搞了好一会才搞明白其用法.所以想贴出来帮助需要帮助的人.
var
   s:string;
   ps:Pchar;
   b:pbyte;
   len:integer;
begin
 &nb ......

delphi技巧记录


#13回车换行
将form2内容加入到form1列表框:在form2里:form1.listbox1.items.add(edit1.text)
listbox1.items.loadfromfile('chinese.txt')将chinese.txt文件内容载入列表框中。但前提是要整个窗体创建时候加载导入,双击整个窗体procedure TForm1.FormCreate(Sender: TObject)
listbox1.items.savetofile('chinese. ......

delphi 编译后出现iphist.dat 文件

 很奇怪,昨天在编译程序的时候,出现过,iphist.dat 文件。每次执行都出现,仔细查看代码,什么也没有啊!后来在网站找到原因:
 使用了IPWatch 控件的
一般产生这个文件是因为使用了indy的 TIdIPWatch 控件
该控件有个
ip历史的功能。
historyfilename指定的是保存ip历史记录的文件名,默认是iphist.Dat ......

Delphi中用ADO系列控件获得存储过程的Return值

在Delphi中Ado系列控件使用xxxxx.Parameters.Refresh,可以获得存储过程的Return值
以TADOStoredProc为例
  ADOStoredProc1.Connection := 'xxxx';
  ADOStoredProc1.ProcedureName := 'XXXX';
  ADOStoredProc1.Parameters.Refresh;   //刷新存储过程的参数列表
 //参数赋值
 ADO ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号