Artigo: 308216 - Última revisão: terça-feira, 4 de Abril de 2006 - Revisão: 3.3

PROBLEMA: É necessário reiniciar o computador depois de utilizar a função ChangeDisplaySettingsEx para anexar um monitor secundário

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

Num sistema baseado no Windows XP ou Windows 2000, quando utiliza a função ChangeDisplaySettingsEx para ligar um monitor secundário para o ambiente de trabalho, a alteração não entrará efeito até reiniciar o computador.

Causa

Este problema ocorre em computadores portáteis de múltiplos monitores que utilizam uma implementação duplo-vista, com que pode utilizar o monitor CRT externo e o ecrã de LCD incorporado.

Resolução

Para resolver este problema, contacte ChangeDisplaySettings(NULL, 0) para actualizar o ambiente de trabalho imediatamente após chamar ChangeDisplaySettingsEx para anexar o monitor secundário do ambiente de trabalho. Isto faz com que o sistema utilizar as definições no registo e repõe a cada um dos dispositivos de visualização.

Mais Informação

O seguinte código anexa o primeiro dispositivo secundário que encontrar no ambiente de trabalho sem ter de reiniciar o computador:
BOOL AddUnattachedDisplayDeviceToDesktop()
{
    DWORD DispNum = 0;
    DISPLAY_DEVICE DisplayDevice;
    DEVMODE defaultMode;
    HDC hdc;
    int nWidth;
    BOOL bFoundSecondary = FALSE;

    hdc = GetDC(0);
    nWidth = GetDeviceCaps(hdc,HORZRES);
    ReleaseDC(0,hdc);

    // Initialize DisplayDevice.
    ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
    DisplayDevice.cb = sizeof(DisplayDevice);

    // Get display devices.
    while ((EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)) &&
           (bFoundSecondary == FALSE))
    { 
        ZeroMemory(&defaultMode, sizeof(DEVMODE));
        defaultMode.dmSize = sizeof(DEVMODE);
        if (!EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName,
             ENUM_REGISTRY_SETTINGS, &defaultMode))
            return FALSE; // Store default failed

        if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
        {
            //Found the first secondary device.
            bFoundSecondary = TRUE;
            defaultMode.dmPosition.x += nWidth;
            defaultMode.dmFields = DM_POSITION; 
            ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName, 
                    &defaultMode, NULL, CDS_NORESET|CDS_UPDATEREGISTRY, NULL); 

            // A second call to ChangeDisplaySettings updates the monitor.
            ChangeDisplaySettings(NULL, 0); 
        } 

        // Reinitialize DisplayDevice. 
        ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
        DisplayDevice.cb = sizeof(DisplayDevice);
        DispNum++;
    } // End while the display devices. 
    return TRUE;
}
				

A informação contida neste artigo aplica-se a:
  • Microsoft Platform Software Development Kit-January 2000 Edition nas seguintes plataformas
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbmt kbdswgdi2003swept kbgdi kbmultimon kbprb KB308216 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 308216  (http://support.microsoft.com/kb/308216/en-us/ )