Compartir a través de


Objetos de usuario

Los objetos de interfaz de usuario solo admiten un identificador por objeto. Los procesos no pueden heredar ni duplicar identificadores para 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 inferior, 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\Windows NT\Currentversion\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.

aplicación que crea un objeto de ventana

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

En la siguiente ilustración, 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.

destruir un objeto de ventana

Administración de 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 creator 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