Função GetSystemMetrics (winuser.h)
Recupera a métrica do sistema especificada ou a configuração do sistema.
Observe que todas as dimensões recuperadas por GetSystemMetrics estão em pixels.
Sintaxe
int GetSystemMetrics(
[in] int nIndex
);
Parâmetros
[in] nIndex
Tipo: int
A métrica do sistema ou a definição de configuração a ser recuperada. Esse parâmetro pode usar um dos valores a seguir. Observe que todos os valores SM_CX* são larguras e todos os valores SM_CY* são alturas. Observe também que todas as configurações projetadas para retornar dados boolianos representam TRUE como qualquer valor diferente de zero e FALSE como um valor zero.
Valor | Significado |
---|---|
|
Os sinalizadores que especificam como o sistema organizou janelas minimizadas. Para obter mais informações, consulte a seção Comentários neste tópico. |
|
O valor que especifica como o sistema é iniciado:
|
|
O número de monitores de exibição em uma área de trabalho. Para obter mais informações, consulte a seção Comentários neste tópico. |
|
O número de botões em um mouse ou zero se nenhum mouse estiver instalado. |
|
Reflete o estado do laptop ou modo slate, 0 para Modo Slate e diferente de zero caso contrário. Quando essa métrica do sistema é alterada, o sistema envia uma mensagem de difusão por meio de WM_SETTINGCHANGE com "ConvertibleSlateMode" no LPARAM. Observe que essa métrica do sistema não se aplica a computadores desktop. Nesse caso, use GetAutoRotationState. |
|
A largura de uma borda de janela, em pixels. Isso é equivalente ao valor SM_CXEDGE para janelas com a aparência 3D. |
|
A largura nominal de um cursor, em pixels. |
|
Esse valor é o mesmo que SM_CXFIXEDFRAME. |
|
A largura do retângulo ao redor do local de um primeiro clique em uma sequência de clique duplo, em pixels. O segundo clique deve ocorrer dentro do retângulo definido por SM_CXDOUBLECLK e SM_CYDOUBLECLK para que o sistema considere os dois cliques em um clique duplo. Os dois cliques também devem ocorrer dentro de um tempo especificado.
Para definir a largura do retângulo de clique duplo, chame SystemParametersInfo com SPI_SETDOUBLECLKWIDTH. |
|
O número de pixels em ambos os lados de um ponto de mouse para baixo que o ponteiro do mouse pode mover antes do início de uma operação de arrastar. Isso permite que o usuário clique e solte o botão do mouse facilmente sem iniciar acidentalmente uma operação de arrastar. Se esse valor for negativo, ele será subtraído da esquerda do ponto para baixo do mouse e adicionado à direita dele. |
|
A largura de uma borda 3D, em pixels. Essa métrica é a contraparte 3D do SM_CXBORDER. |
|
A espessura do quadro ao redor do perímetro de uma janela que tem um legenda, mas não é considerável, em pixels.
SM_CXFIXEDFRAME é a altura da borda horizontal e SM_CYFIXEDFRAME é a largura da borda vertical.
Esse valor é o mesmo que SM_CXDLGFRAME. |
|
A largura das bordas esquerda e direita do retângulo de foco que o DrawFocusRect desenha. Esse valor está em pixels.
Windows 2000: Não há suporte para esse valor. |
|
Esse valor é o mesmo que SM_CXSIZEFRAME. |
|
A largura da área do cliente para uma janela de tela inteira no monitor de exibição primário, em pixels. Para obter as coordenadas da parte da tela que não é obscurecida pela barra de tarefas do sistema ou pelas barras de ferramentas da área de trabalho do aplicativo, chame a função SystemParametersInfo com o valor SPI_GETWORKAREA. |
|
A largura do bitmap de seta em uma barra de rolagem horizontal, em pixels. |
|
A largura da caixa de polegar em uma barra de rolagem horizontal, em pixels. |
|
A largura grande do sistema de um ícone, em pixels. A função LoadIcon pode carregar somente ícones com as dimensões que SM_CXICON e SM_CYICON especifica. Consulte Tamanhos de ícone para obter mais informações. |
|
A largura de uma célula de grade para itens na exibição de ícone grande, em pixels. Cada item se encaixa em um retângulo de tamanho SM_CXICONSPACING por SM_CYICONSPACING quando organizado. Esse valor é sempre maior ou igual a SM_CXICON. |
|
A largura padrão, em pixels, de uma janela de nível superior maximizada no monitor de exibição primário. |
|
A largura máxima padrão de uma janela que tem um legenda e bordas de dimensionamento, em pixels. Essa métrica refere-se a toda a área de trabalho. O usuário não pode arrastar o quadro da janela para um tamanho maior que essas dimensões. Uma janela pode substituir esse valor processando a mensagem WM_GETMINMAXINFO . |
|
A largura do menu padrão marcar-mark bitmap, em pixels. |
|
A largura dos botões da barra de menus, como o botão de fechamento da janela filho que é usado na interface de vários documentos, em pixels. |
|
A largura mínima de uma janela, em pixels. |
|
A largura de uma janela minimizada, em pixels. |
|
A largura de uma célula de grade para uma janela minimizada, em pixels. Cada janela minimizada se encaixa em um retângulo desse tamanho quando organizada. Esse valor é sempre maior ou igual a SM_CXMINIMIZED. |
|
A largura mínima de acompanhamento de uma janela, em pixels. O usuário não pode arrastar o quadro da janela para um tamanho menor que essas dimensões. Uma janela pode substituir esse valor processando a mensagem WM_GETMINMAXINFO . |
|
A quantidade de preenchimento de borda para janelas legendadas, em pixels.
Windows XP/2000: Não há suporte para esse valor. |
|
A largura da tela do monitor de exibição primário, em pixels. Esse é o mesmo valor obtido chamando GetDeviceCaps da seguinte maneira: GetDeviceCaps(
hdcPrimaryMonitor, HORZRES) .
|
|
A largura de um botão em uma janela legenda ou barra de título, em pixels. |
|
A espessura da borda de dimensionamento ao redor do perímetro de uma janela que pode ser redimensionada, em pixels.
SM_CXSIZEFRAME é a largura da borda horizontal e SM_CYSIZEFRAME é a altura da borda vertical.
Esse valor é o mesmo que SM_CXFRAME. |
|
A largura pequena do sistema de um ícone, em pixels. Ícones pequenos normalmente aparecem em legendas de janela e no modo de exibição de ícone pequeno. Consulte Tamanhos de ícone para obter mais informações. |
|
A largura de botões pequenos legenda, em pixels. |
|
A largura da tela virtual, em pixels. A tela virtual é o retângulo delimitador de todos os monitores de exibição. A métrica SM_XVIRTUALSCREEN são as coordenadas para o lado esquerdo da tela virtual. |
|
A largura de uma barra de rolagem vertical, em pixels. |
|
A altura de uma borda de janela, em pixels. Isso é equivalente ao valor SM_CYEDGE para janelas com a aparência 3D. |
|
A altura de uma área legenda, em pixels. |
|
A altura nominal de um cursor, em pixels. |
|
Esse valor é o mesmo que SM_CYFIXEDFRAME. |
|
A altura do retângulo ao redor da localização de um primeiro clique em uma sequência de clique duplo, em pixels. O segundo clique deve ocorrer dentro do retângulo definido por SM_CXDOUBLECLK e SM_CYDOUBLECLK para que o sistema considere os dois cliques em um clique duplo. Os dois cliques também devem ocorrer dentro de um tempo especificado.
Para definir a altura do retângulo de clique duplo, chame SystemParametersInfo com SPI_SETDOUBLECLKHEIGHT. |
|
O número de pixels acima e abaixo de um ponto de mouse para baixo que o ponteiro do mouse pode mover antes que uma operação de arrastar comece. Isso permite que o usuário clique e solte o botão do mouse facilmente sem iniciar involuntariamente uma operação de arrastar. Se esse valor for negativo, ele será subtraído acima do ponto de mouse para baixo e adicionado abaixo dele. |
|
A altura de uma borda 3D, em pixels. Este é o equivalente 3D de SM_CYBORDER. |
|
A espessura do quadro ao redor do perímetro de uma janela que tem um legenda mas não é considerável, em pixels.
SM_CXFIXEDFRAME é a altura da borda horizontal e SM_CYFIXEDFRAME é a largura da borda vertical.
Esse valor é o mesmo que SM_CYDLGFRAME. |
|
A altura das bordas superior e inferior do retângulo de foco desenhado por DrawFocusRect. Esse valor está em pixels.
Windows 2000: Não há suporte para esse valor. |
|
Esse valor é o mesmo que SM_CYSIZEFRAME. |
|
A altura da área do cliente para uma janela de tela inteira no monitor de exibição primário, em pixels. Para obter as coordenadas da parte da tela não obscurecidas pela barra de tarefas do sistema ou pelas barras de ferramentas da área de trabalho do aplicativo, chame a função SystemParametersInfo com o valor SPI_GETWORKAREA. |
|
A altura de uma barra de rolagem horizontal, em pixels. |
|
A altura grande do sistema de um ícone, em pixels. A função LoadIcon pode carregar apenas ícones com as dimensões que SM_CXICON e SM_CYICON especifica. Consulte Tamanhos de ícone para obter mais informações. |
|
A altura de uma célula de grade para itens na exibição de ícone grande, em pixels. Cada item se encaixa em um retângulo de tamanho SM_CXICONSPACING SM_CYICONSPACING quando organizado. Esse valor é sempre maior ou igual a SM_CYICON. |
|
Para versões de conjunto de caracteres de bytes duplos do sistema, essa é a altura da janela Kanji na parte inferior da tela, em pixels. |
|
A altura padrão, em pixels, de uma janela de nível superior maximizada no monitor de exibição primário. |
|
A altura máxima padrão de uma janela que tem uma legenda e bordas de dimensionamento, em pixels. Essa métrica refere-se a toda a área de trabalho. O usuário não pode arrastar o quadro da janela para um tamanho maior que essas dimensões. Uma janela pode substituir esse valor processando a mensagem WM_GETMINMAXINFO . |
|
A altura de uma barra de menus de linha única, em pixels. |
|
A altura do menu padrão marcar-mark bitmap, em pixels. |
|
A altura dos botões da barra de menus, como o botão de fechamento da janela filho que é usado na interface de vários documentos, em pixels. |
|
A altura mínima de uma janela, em pixels. |
|
A altura de uma janela minimizada, em pixels. |
|
A altura de uma célula de grade para uma janela minimizada, em pixels. Cada janela minimizada se encaixa em um retângulo desse tamanho quando organizada. Esse valor é sempre maior ou igual a SM_CYMINIMIZED. |
|
A altura mínima de acompanhamento de uma janela, em pixels. O usuário não pode arrastar o quadro da janela para um tamanho menor que essas dimensões. Uma janela pode substituir esse valor processando a mensagem WM_GETMINMAXINFO . |
|
A altura da tela do monitor de exibição primário, em pixels. Esse é o mesmo valor obtido chamando GetDeviceCaps da seguinte maneira: GetDeviceCaps(
hdcPrimaryMonitor, VERTRES) .
|
|
A altura de um botão em uma janela legenda ou barra de título, em pixels. |
|
A espessura da borda de dimensionamento ao redor do perímetro de uma janela que pode ser redimensionada, em pixels.
SM_CXSIZEFRAME é a largura da borda horizontal e SM_CYSIZEFRAME é a altura da borda vertical.
Esse valor é o mesmo que SM_CYFRAME. |
|
A altura de um pequeno legenda, em pixels. |
|
A altura pequena do sistema de um ícone, em pixels. Ícones pequenos normalmente aparecem em legendas de janela e no modo de exibição de ícone pequeno. Consulte Tamanhos de ícone para obter mais informações. |
|
A altura de botões pequenos legenda, em pixels. |
|
A altura da tela virtual, em pixels. A tela virtual é o retângulo delimitador de todos os monitores de exibição. A métrica SM_YVIRTUALSCREEN são as coordenadas para a parte superior da tela virtual. |
|
A altura do bitmap de seta em uma barra de rolagem vertical, em pixels. |
|
A altura da caixa de polegar em uma barra de rolagem vertical, em pixels. |
|
Diferente de zero se User32.dll der suporte a DBCS; caso contrário, 0. |
|
Diferente de zero se a versão de depuração do User.exe estiver instalada; caso contrário, 0. |
|
Diferente de zero se o sistema operacional atual for o Windows 7 ou o Windows Server 2008 R2 e o serviço de Entrada do Tablet PC for iniciado; caso contrário, 0. O valor retornado é uma máscara de bits que especifica o tipo de entrada do digitalizador compatível com o dispositivo. Para obter mais informações, consulte Comentários.
Windows Server 2008, Windows Vista e Windows XP/2000: Não há suporte para esse valor. |
|
Diferente de zero se o Gerenciador de Métodos de Entrada/Método de Entrada Editor recursos estiverem habilitados; caso contrário, 0.
SM_IMMENABLED indica se o sistema está pronto para usar um IME baseado em Unicode em um aplicativo Unicode. Para garantir que um IME dependente de idioma funcione, marcar SM_DBCSENABLED e a página de código ANSI do sistema. Caso contrário, a conversão ANSI para Unicode pode não ser executada corretamente ou alguns componentes, como fontes ou configurações do Registro, podem não estar presentes. |
|
Diferente de zero se houver digitalizadores no sistema; caso contrário, 0.
SM_MAXIMUMTOUCHES retorna o máximo agregado do número máximo de contatos com suporte de cada digitalizador no sistema. Se o sistema tiver apenas digitalizadores de toque único, o valor retornado será 1. Se o sistema tiver digitalizadores de vários toques, o valor retornado será o número de contatos simultâneos que o hardware pode fornecer. Windows Server 2008, Windows Vista e Windows XP/2000: Não há suporte para esse valor. |
|
Diferente de zero se o sistema operacional atual for o Windows XP, Media Center Edition, 0 se não for. |
|
Diferente de zero se os menus suspensos estiverem alinhados à direita com o item da barra de menus correspondente; 0 se os menus estiverem alinhados à esquerda. |
|
Diferente de zero se o sistema estiver habilitado para idiomas hebraicos e árabes, 0 se não estiver. |
|
Diferente de zero se um mouse estiver instalado; caso contrário, 0. Esse valor raramente é zero, devido ao suporte para ratos virtuais e porque alguns sistemas detectam a presença da porta em vez da presença de um mouse. |
|
Diferente de zero se um mouse com uma roda de rolagem horizontal estiver instalado; caso contrário, 0. |
|
Diferente de zero se um mouse com uma roda de rolagem vertical estiver instalado; caso contrário, 0. |
|
O bit menos significativo será definido se uma rede estiver presente; caso contrário, ele será limpo. Os outros bits são reservados para uso futuro. |
|
Diferente de zero se as extensões de computação do Microsoft Windows para Caneta estiverem instaladas; caso contrário, zero. |
|
Essa métrica do sistema é usada em um ambiente de Serviços de Terminal para determinar se a sessão atual do Terminal Server está sendo controlada remotamente. Seu valor será diferente de zero se a sessão atual for controlada remotamente; caso contrário, 0.
Você pode usar ferramentas de gerenciamento de serviços de terminal, como o Gerenciador de Serviços de Terminal (tsadmin.msc) e shadow.exe para controlar uma sessão remota. Quando uma sessão está sendo controlada remotamente, outro usuário pode exibir o conteúdo dessa sessão e potencialmente interagir com ela. |
|
Essa métrica do sistema é usada em um ambiente de Serviços de Terminal. Se o processo de chamada estiver associado a uma sessão de cliente dos Serviços de Terminal, o valor retornado será diferente de zero. Se o processo de chamada estiver associado à sessão de console dos Serviços de Terminal, o valor retornado será 0. Windows Server 2003 e Windows XP: A sessão do console não é necessariamente o console físico. Para obter mais informações, consulte WTSGetActiveConsoleSessionId. |
|
Diferente de zero se todos os monitores de exibição tiverem o mesmo formato de cor, caso contrário, 0. Duas telas podem ter a mesma profundidade de bit, mas formatos de cor diferentes. Por exemplo, os pixels vermelho, verde e azul podem ser codificados com números diferentes de bits ou esses bits podem estar localizados em locais diferentes em um valor de cor de pixel. |
|
Essa métrica do sistema deve ser ignorada; ele sempre retorna 0. |
|
O número de build se o sistema for Windows Server 2003 R2; caso contrário, 0. |
|
Diferente de zero se o usuário exigir que um aplicativo apresente informações visualmente em situações em que, de outra forma, ele apresentaria as informações apenas de forma audível; caso contrário, 0. |
|
Diferente de zero se a sessão atual estiver sendo fechada; caso contrário, 0.
Windows 2000: Não há suporte para esse valor. |
|
Diferente de zero se o computador tiver um processador de baixo nível (lento) ; caso contrário, 0. |
|
Diferente de zero se o sistema operacional atual for Windows 7 Starter Edition, Windows Vista Starter ou Windows XP Starter Edition; caso contrário, 0. |
|
Diferente de zero se os significados dos botões esquerdo e direito do mouse forem trocados; caso contrário, 0. |
|
Reflete o estado do modo de encaixe, 0 para Modo Desencaixado e diferente de zero caso contrário. Quando essa métrica do sistema é alterada, o sistema envia uma mensagem de difusão por meio de WM_SETTINGCHANGE com "SystemDockMode" no LPARAM. |
|
Diferente de zero se o sistema operacional atual for o Windows XP Tablet PC edition ou se o sistema operacional atual for Windows Vista ou Windows 7 e o serviço tablet PC Input for iniciado; caso contrário, 0. A configuração SM_DIGITIZER indica o tipo de entrada do digitalizador compatível com um dispositivo que executa o Windows 7 ou o Windows Server 2008 R2. Para obter mais informações, consulte Comentários. |
|
As coordenadas para o lado esquerdo da tela virtual. A tela virtual é o retângulo delimitador de todos os monitores de vídeo. A métrica SM_CXVIRTUALSCREEN é a largura da tela virtual. |
|
As coordenadas para a parte superior da tela virtual. A tela virtual é o retângulo delimitador de todos os monitores de vídeo. A métrica SM_CYVIRTUALSCREEN é a altura da tela virtual. |
Retornar valor
Tipo: int
Se a função for bem-sucedida, o valor retornado será a métrica do sistema solicitada ou a definição de configuração.
Se a função falhar, o valor retornado será 0. GetLastError não fornece informações de erro estendidas.
Comentários
As métricas do sistema podem variar de exibição para exibição.
GetSystemMetrics(SM_CMONITORS) conta apenas monitores de exibição visíveis. Isso é diferente de EnumDisplayMonitors, que enumera monitores de exibição visíveis e pseudo-monitores invisíveis associados a drivers de espelhamento. Um pseudo-monitor invisível é associado a um pseudo-dispositivo usado para espelho desenho de aplicativo para comunicação remota ou outras finalidades.
A configuração SM_ARRANGE especifica como o sistema organiza janelas minimizadas e consiste em uma posição inicial e uma direção. A posição inicial pode ser um dos valores a seguir.
Valor | Significado |
---|---|
ARW_BOTTOMLEFT | Comece no canto inferior esquerdo da tela. A posição padrão. |
ARW_BOTTOMRIGHT | Comece no canto inferior direito da tela. Equivalente a ARW_STARTRIGHT. |
ARW_TOPLEFT | Comece no canto superior esquerdo da tela. Equivalente a ARW_STARTTOP. |
ARW_TOPRIGHT | Comece no canto superior direito da tela. Equivalente a ARW_STARTTOP | SRW_STARTRIGHT. |
A direção na qual organizar janelas minimizadas pode ser um dos valores a seguir.
Valor | Significado |
---|---|
ARW_DOWN | Organize verticalmente, de cima para baixo. |
ARW_HIDE | Ocultar janelas minimizadas movendo-as para fora da área visível da tela. |
ARW_LEFT | Organize horizontalmente, da esquerda para a direita. |
ARW_RIGHT | Organize horizontalmente, da direita para a esquerda. |
ARW_UP | Organize verticalmente, de baixo para cima. |
A configuração SM_DIGITIZER especifica o tipo de digitalizadores instalados em um dispositivo que executa o Windows 7 ou o Windows Server 2008 R2. O valor retornado é uma máscara de bits que especifica um ou mais dos valores a seguir.
Valor | Significado |
---|---|
NID_INTEGRATED_TOUCH 0x01 |
O dispositivo tem um digitalizador de toque integrado. |
NID_EXTERNAL_TOUCH 0x02 |
O dispositivo tem um digitalizador de toque externo. |
NID_INTEGRATED_PEN 0x04 |
O dispositivo tem um digitalizador de caneta integrado. |
NID_EXTERNAL_PEN 0x08 |
O dispositivo tem um digitalizador de caneta externo. |
NID_MULTI_INPUT 0x40 |
O dispositivo dá suporte a várias fontes de entrada do digitalizador. |
NID_READY 0x80 |
O dispositivo está pronto para receber a entrada do digitalizador. |
Essa API não tem reconhecimento de DPI e não deve ser usada se o thread de chamada estiver ciente do DPI por monitor. Para obter a versão com reconhecimento de DPI dessa API, consulte GetSystemMetricsForDPI. Para obter mais informações sobre o reconhecimento de DPI, consulte a documentação do Windows High DPI.
Exemplos
O exemplo a seguir usa a função GetSystemMetrics para determinar se um mouse está instalado e se os botões do mouse são trocados. O exemplo também usa a função SystemParametersInfo para recuperar o limite e a velocidade do mouse. Ele exibe as informações no console.
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")
void main()
{
BOOL fResult;
int aMouseInfo[3];
fResult = GetSystemMetrics(SM_MOUSEPRESENT);
if (fResult == 0)
printf("No mouse installed.\n");
else
{
printf("Mouse installed.\n");
// Determine whether the buttons are swapped.
fResult = GetSystemMetrics(SM_SWAPBUTTON);
if (fResult == 0)
printf("Buttons not swapped.\n");
else printf("Buttons swapped.\n");
// Get the mouse speed and the threshold values.
fResult = SystemParametersInfo(
SPI_GETMOUSE, // get mouse information
0, // not used
&aMouseInfo, // holds mouse information
0); // not used
if( fResult )
{
printf("Speed: %d\n", aMouseInfo[2]);
printf("Threshold (x,y): %d,%d\n",
aMouseInfo[0], aMouseInfo[1]);
}
}
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winuser.h (inclua Windows.h) |
Biblioteca | User32.lib |
DLL | User32.dll |
Conjunto de APIs | ext-ms-win-ntuser-sysparams-ext-l1-1-0 (introduzido no Windows 8) |