Compartilhar via


Objetos do usuário

Os objetos de interface do usuário dão suporte apenas a um identificador por objeto. Os processos não podem herdar ou duplicar identificadores para objetos de usuário. Os processos em uma sessão não podem referenciar um identificador de usuário em outra sessão.

Há um limite teórico de 65.536 identificadores de usuário por sessão. No entanto, o número máximo de identificadores de usuário que podem ser abertos por sessão geralmente é menor, pois é afetado pela memória disponível. Também há um limite padrão por processo de identificadores de usuário. Para alterar esse limite, defina o seguinte valor do Registro:

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

Esse valor pode ser definido como um número entre 200 e 18.000.

Identificadores para objetos de usuário

Identificadores para objetos de usuário são públicos para todos os processos. Ou seja, qualquer processo pode usar o identificador de objeto do usuário, desde que o processo tenha acesso de segurança ao objeto .

Na ilustração a seguir, um aplicativo cria um objeto de janela. A função CreateWindow cria o objeto window e retorna um identificador de objeto.

aplicativo criando um objeto de janela

Depois que o objeto de janela tiver sido criado, o aplicativo poderá usar o identificador de janela para exibir ou alterar a janela. O identificador permanece válido até que o objeto de janela seja destruído.

Na próxima ilustração, o aplicativo destrói o objeto de janela. A função DestroyWindow remove o objeto de janela da memória, o que invalida o identificador de janela.

destruindo um objeto de janela

Gerenciando objetos de usuário

A tabela a seguir lista os objetos de usuário, juntamente com as funções de criador e destruidor de cada objeto. As funções do criador criam o objeto e um identificador de objeto ou simplesmente retornam o identificador de objeto existente. As funções do destruidor removem o objeto da memória, o que invalida o identificador do objeto.

Objeto de usuário Função Criador Função Destroyer
Tabela aceleradora CreateAcceleratorTable DestroyAcceleratorTable
Cursor Createcaret DestroyCaret
Cursor CreateCursor, LoadCursor, LoadImage DestroyCursor
Conversa de DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Gancho SetWindowsHookEx UnhookWindowsHookEx
ícone CreateIconIndirect, LoadIcon, LoadImage Destroyicon
Menu CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect Destroymenu
Janela CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Posição da janela Begindeferwindowpos Enddeferwindowpos