了解句柄
在调用 DLL 函数前必须理解的另外一个重要概念是句柄。句柄是一个 32 位的正整数,Microsoft® Windows® 用它来识别窗体或其他对象,例如字体或位图。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。 因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。 创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。虽然句柄在窗口的整个生存期内保持不变,但不能保证某窗口在被损坏并重新创建后还使用原来的句柄。所以,如果在变量中存储了一个句柄,请记住窗口损坏后句柄就失效了。 例如 GetActiveWindow 函数就可以返回窗口的句柄,这里的窗口是一个当前活动的应用程序窗口。GetWindowText 函数接受窗口的句柄,如果该窗口有标题,则返回标题。下面的过程用 GetActiveWindow 返回活动窗口的句柄,用 GetWindowText 返回该窗口的标题: Declare Function GetActiveWindow Lib "user32" () As Long Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _ (ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Function ActiveWindowCaption() As String Dim strCaption As String Dim lngLen As Long ' 创建由空字符填充的字符串。 strCaption = String$(255, vbNullChar) ' 返回字符串长度。 lngLen = Len(strCaption) ' 调用 GetActiveWindow,返回活动窗口的句柄, ' 把句柄连同字符串和字符串长度一起传递给 GetWindowText。 If (GetWindowText(GetActiveWindow, strCaption, lngLen) > 0) Then ' 返回 Windows 写到字符串中的值。 ActiveWindowCaption = strCaption End If End Function GetWindowText 函数有 3 个参数:窗口句柄;准备接受窗口标题的 NULL 结束字符串;以及该字符串的长度。
--------------------------------------------------------------------------------
相关文章
剖析 Declare 语句 2004-1-28 15:08:06
什么是 API? 2004-1-28 15:01:53
对注册表操作技巧-将程序在开机时运行 2003-11-18 9:24:59
officeXP下使用文件对话框的另外一种方法 2003-11-17 8:47:04
真正实现在windows2000下关机的源代码 2003-11-14 8:32:00
获取Windows用户登录名 2003-11-7 8:42:45
获取网卡物理地址 2003-11-7 8:40:48
隐藏Access主窗口之二 2003-11-7 8:34:20
如何让窗体总在最前面? 2003-11-7 8:25:19
如何关闭计算机? 2003-11-7 8:24:43
如何建立简单的超级连接?(ShellExecute) 2003-11-6 20:39:18
如何让窗体的标题条闪烁以引起用户注意? 2003-11-6 20:38:43
怎样找到鼠标指针的XY坐标? 2003-11-6 20:37:33
在程序中如何打开和关闭光驱门? 2003-11-6 20:20:00
怎样使Ctrl-Alt-Delete无效? 2003-11-6 20:19:25
如何移动没有标题栏的窗口? 2003-11-6 20:17:30
延时函数 2003-11-6 20:16:53
让控件自适应屏幕分辨率 2003-10-18 9:58:33
键盘常用代码一览表 2003-10-17 19:54:02
重新定位链接表二步走 2003-10-17 19:00:07
ADO连接数据库字符串大全 2003-10-17 18:40:47
如何确定当前屏幕分辨率 2003-10-14 8:41:00
获取windows安装路径 2003-10-14 8:39:08
将 Microsoft Access 用作 Automation 服务器 2003-10-14 8:37:19
优化Microsoft Access提高速度 2003-10-6 10:31:55
|