Oggetti utente

Gli oggetti dell'interfaccia utente supportano un solo handle per oggetto. I processi non possono ereditare o duplicare handle agli oggetti utente. I processi in una sessione non possono fare riferimento a un handle utente in un'altra sessione.

Esiste un limite teorico di 65.536 handle utente per sessione. Tuttavia, il numero massimo di handle utente che possono essere aperti per sessione è in genere inferiore, poiché è interessato dalla memoria disponibile. Esiste anche un limite predefinito per processo degli handle utente. Per modificare questo limite, impostare il valore del Registro di sistema seguente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Currentversion\Finestre\USERProcessHandleQuota

Questo valore può essere impostato su un numero compreso tra 200 e 18.000.

Handle agli oggetti utente

Gli handle per gli oggetti utente sono pubblici per tutti i processi. Ovvero, qualsiasi processo può usare l'handle dell'oggetto utente, purché il processo disponga dell'accesso di sicurezza all'oggetto.

Nella figura seguente un'applicazione crea un oggetto finestra. La funzione CreateWindow crea l'oggetto finestra e restituisce un handle di oggetto.

applicazione che crea un oggetto finestra

Dopo aver creato l'oggetto finestra, l'applicazione può usare l'handle della finestra per visualizzare o modificare la finestra. L'handle rimane valido fino a quando l'oggetto finestra non viene eliminato definitivamente.

Nell'illustrazione successiva l'applicazione elimina definitivamente l'oggetto finestra. La funzione DestroyWindow rimuove l'oggetto finestra dalla memoria, che invalida l'handle della finestra.

eliminazione di un oggetto finestra

Gestione degli oggetti utente

Nella tabella seguente sono elencati gli oggetti utente, insieme alle funzioni creator e destroyer di ogni oggetto. Le funzioni creator creano l'oggetto e un handle di oggetto o restituiscono semplicemente l'handle dell'oggetto esistente. Le funzioni destroyer rimuovono l'oggetto dalla memoria, che invalida l'handle dell'oggetto.

Oggetto utente Funzione Creator Funzione Destroyer
Tabella acceleratore CreateAcceleratorTable DestroyAcceleratorTable
Cursore CreateCaret DestroyCaret
Cursore CreateCursor, LoadCursor, LoadImage DestroyCursor
Conversazione DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Gancio Setwindowshookex UnhookWindowsHookEx
Icona CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Menu CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Finestra CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow Destroywindow
Posizione finestra BeginDeferWindowPos EndDeferWindowPos