Condividi tramite


Oggetti utente

Gli oggetti dell'interfaccia utente supportano un solo handle per oggetto. I processi non possono ereditare o duplicare handle per gli 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 di handle utente. Per modificare questo limite, impostare il valore del Registro di sistema seguente:

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

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

Handle per gli 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.

l'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. Il creatore funziona per creare l'oggetto e un handle di oggetto o semplicemente restituire l'handle di oggetto esistente. Le funzioni destroyer rimuovono l'oggetto dalla memoria, che invalida l'handle dell'oggetto.

Oggetto User Funzione Creator Funzione Destroyer
Tabella dell'acceleratore CreateAcceleratorTable DestroyAcceleratorTable
Cursore CreateCaret DestroyCaret
Cursore CreateCursor, LoadCursor, LoadImage destroyCursor
Conversazione DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Uncino SetWindowsHookEx UnhookWindowsHookEx
Icona CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Menù CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Finestra CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Posizione finestra BeginDeferWindowPos EndDeferWindowPos