Delphi
27
提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中.SetWindowsHookEx( idHook: Integer; {钩子类型} lpfn: TFNHookProc; {函数指针} hmod: HINST; {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0} dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}): HHOOK;
14
//声明:MoveWindow( hWnd: HWND; {窗口句柄} X, Y: Integer; {位置} nWidth, nHeight: Integer; {大小} bRepaint: BOOL {是否重绘}): BOOL;//举例:procedure TForm1.Button1Click(Sender: TObject);begin MoveWindow(Button1.Handle, 0, 0, Client
28
WinAPI: SetWindowText - 设置窗口标题//声明:SetWindowText( hWnd: HWND; {窗口句柄} lpString: PChar {新标题串指针}): BOOL;//举例:var s: string;begin s := '新标题'; SetWindowText(Handle, PAnsiChar(s));end;
88
WinAPI: GetWindowText - 获取窗口标题//声明:GetWindowText( hWnd: HWND; {窗口句柄} lpString: PChar; {接收文本的缓冲区的指针} nMaxCount: Integer {指定缓冲区大小, 其中包含NULL字符; 如果文本超出,会被被截断}): Integer; {返回字符个数, 不包括中断的空字符; 如果标题为空或句柄无效, 则返回零}//举例:var arr: array[0..254]
25
WinAPI: GetWindowTextLength - 获取窗口标题长度//声明:GetWindowTextLength( hWnd: HWND {窗口句柄}): Integer; {返回窗口标题长度}//举例:var i: Integer;begin i := GetWindowTextLength(Self.Handle); ShowMessage(IntToStr(i));end;
41
上一个例子是从 DLL 中接受数据, 那怎么给 DLL 传递数据呢? 还有, 在接受数据时, 让 Timer 一直在那扫描也不是个好办法呀. 本例解决了这些问题(但不知解决了博友 "鹏" 的问题没有?).为了方便测试, 提供一个源码下载吧: http://www.cnblogs.com/Files/del/MouseHook_2.rar本例效果图(和上一例是一样的):DLL 文件:library MyHook;uses SysUtils, Windows, Messages,
88
前言: 博友 "鹏" 来信探讨关于钩子的问题, 核心困难是: dll 中的数据如何传递出来. 在接下来的两个例子中探讨这个问题.本例建立一个全局的鼠标钩子, 然后把鼠标的相关信息通过一个自定义的 GetInfo 函数传递给调用钩子的程序.为了方便测试, 提供一个源码下载吧: http://www.cnblogs.com/Files/del/MouseHook_1.rarDLL 文件:library MyHook;uses SysUtils, Windows, Messages,
53
目前对钩子的理解:譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A;首先发现这些事件的不是窗口, 而是系统!然后系统告诉窗口: 喂! 你让人点了, 并且是连续点了两鼠标, 你准备怎么办?或者是系统告诉窗口: 喂! 有人向你家里扔砖头了, 不信你看看, 那块砖头是 A.这时窗口的对有些事件会忽略、对有些事件会做出反应:譬如, 可能对鼠标单击事件忽略, 窗口想: 你单击我不要紧, 累死你我不负责;但一旦谁要双击我, 我会马上行动, 给你点颜色瞧瞧!这里窗口准备要采取的行动, 就是我们