用户对象

用户界面对象仅支持每个对象的一个句柄。 进程无法继承或复制用户对象的句柄。 一个会话中的进程不能引用另一个会话中的用户句柄。

每个会话的理论限制为 65,536 个用户句柄。 但是,每个会话可以打开的最大用户句柄数通常较低,因为它受可用内存的影响。 还有用户句柄的默认按进程限制。 若要更改此限制,请设置以下注册表值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota

此值可以设置为介于 200 和 18,000 之间的数字。

用户对象的句柄

用户对象的句柄对所有进程都是公共的。 也就是说,只要进程对对象具有安全访问权限,任何进程都可以使用用户对象句柄。

在下图中,应用程序创建一个窗口对象。 CreateWindow 函数创建窗口对象并返回对象句柄。

创建窗口对象的应用程序

创建窗口对象后,应用程序可以使用窗口句柄显示或更改窗口。 该句柄在销毁窗口对象之前保持有效。

在下一个图中,应用程序销毁窗口对象。 DestroyWindow 函数从内存中删除窗口对象,使窗口句柄失效。

销毁窗口对象

管理用户对象

下表列出了用户对象以及每个对象的创建者和销毁器函数。 创建者函数可以创建对象和对象句柄,或者只返回现有对象句柄。 销毁器函数从内存中删除对象,使对象句柄失效。

User 对象 Creator 函数 Destroyer 函数
快捷键表 CreateAcceleratorTable DestroyAcceleratorTable
插入符号 CreateCaret DestroyCaret
光标 CreateCursorLoadCursorLoadImage DestroyCursor
DDE 对话 DdeConnectDdeConnectList DdeDisconnectDdeDisconnectList
SetWindowsHookEx UnhookWindowsHookEx
图标 CreateIconIndirectLoadIconLoadImage DestroyIcon
菜单 CreateMenuCreatePopupMenuLoadMenuLoadMenuIndirect DestroyMenu
CreateWindowCreateWindowExCreateDialogParamCreateDialogIndirectParamCreateMDIWindow DestroyWindow
窗口位置 BeginDeferWindowPos EndDeferWindowPos