Objetos de usuario

Los objetos de interfaz de usuario solo admiten un identificador por objeto. Los procesos no pueden heredar ni duplicar identificadores de objetos de usuario. Los procesos de una sesión no pueden hacer referencia a un identificador de usuario en otra sesión.

Hay un límite teórico de 65 536 identificadores de usuario por sesión. Sin embargo, el número máximo de identificadores de usuario que se pueden abrir por sesión suele ser menor, ya que se ve afectado por la memoria disponible. También hay un límite predeterminado por proceso de identificadores de usuario. Para cambiar este límite, establezca el siguiente valor del Registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNTCurrentVersion\\Windows\USERProcessHandleQuota

Este valor se puede establecer en un número comprendido entre 200 y 18 000.

Identificadores de objetos de usuario

Los identificadores de los objetos de usuario son públicos para todos los procesos. Es decir, cualquier proceso puede usar el identificador de objeto de usuario, siempre que el proceso tenga acceso de seguridad al objeto.

En la ilustración siguiente, una aplicación crea un objeto window. La función CreateWindow crea el objeto window y devuelve un identificador de objeto.

application creating a window object

Una vez creado el objeto de ventana, la aplicación puede usar el identificador de ventana para mostrar o cambiar la ventana. El identificador sigue siendo válido hasta que se destruye el objeto de ventana.

En la ilustración siguiente, la aplicación destruye el objeto window. La función DestroyWindow quita el objeto de ventana de la memoria, que invalida el identificador de la ventana.

destroying a window object

Administrar objetos de usuario

En la tabla siguiente se enumeran los objetos de usuario, junto con las funciones creador y destructor de cada objeto. Las funciones de creador crean el objeto y un identificador de objeto o simplemente devuelven el identificador de objeto existente. Las funciones de destructor quitan el objeto de la memoria, que invalida el identificador de objeto.

Objeto de usuario Función Creator Función Destroyer
Tabla aceleradora CreateAcceleratorTable DestroyAcceleratorTable
Símbolo de intercalación CreateCaret DestroyCaret
Cursor CreateCursor, LoadCursor, LoadImage DestroyCursor
Conversación de DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Enlace SetWindowsHookEx UnhookWindowsHookEx
Icono CreateIconIndirect, LoadIcon, LoadImage Destroyicon
Menú CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Periodo CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Posición de la ventana BeginDeferWindowPos EndDeferWindowPos