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 window.

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

destruir un objeto de ventana

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.

User (objeto) Función Creator Función Destroyer
Tabla aceleradora CreateAcceleratorTable destroyAcceleratorTable
Signo de intercalación CreateCaret DestroyCaret
Cursor CreateCursor, LoadCursor, LoadImage destroyCursor
Conversación de DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Gancho setWindowsHookEx unhookWindowsHookEx
Icono CreateIconIndirect , LoadIcon, LoadImage destroyIcon
Menú CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect destroyMenu
Ventana CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Posición de la ventana BeginDeferWindowPos EndDeferWindowPos