none
Проблема с JS на Windows 7 64-bit RRS feed

  • Вопрос

  • Следующий скрипт почему то неправильно работает на 64-битной версии Windows 7.

    WScript.Echo(fileNameWallpaper());
     
    //Функция возвращающая имя файла образца обоев в зависимости от разрешения экрана
    function fileNameWallpaper()
    {
        var resolution, h, w;
        var objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\CIMV2");
        var objMonitor = objService.ExecQuery("SELECT * FROM Win32_DesktopMonitor");
        for (var objMon = new Enumerator(objMonitor); !objMon.atEnd(); objMon.moveNext())
        {
            w = objMon.item().ScreenWidth;
            h = objMon.item().ScreenHeight;
            if((h != null) && (w != null))
            {
                resolution = objMon.item().ScreenWidth.toString() + "x" + objMon.item().ScreenHeight.toString();
                break;
            }
        }
        return "background" + resolution + ".jpg";
    }

    Почему то objMon.item().ScreenWidth и objMon.item().ScreenHeight возвращают null. На windows 7 32-bit и Windows XP все работает нормально. Все выше перечисленные операционки работают в домене.

    8 апреля 2014 г. 17:14

Ответы

  • Попробуйте метод с vbs:

    with createobject("internetexplorer.application")
        .navigate "about:blank"
        with .document.parentWindow.screen
          msgbox "background" & .width & "x"  & .height & ".jpg"
        end with
    end with

    • Помечено в качестве ответа KazunEditor 5 мая 2014 г. 7:18
    10 апреля 2014 г. 7:25
    Отвечающий

Все ответы

  • Подобное наблюдал, когда два монитора. Т.к. у Вас берется последний элемент массива, где параметры равны null.Попробуйте класс - Win32_VideoController и свойства CurrentHorizontalResolution, CurrentVerticalResolution


    • Изменено KazunEditor 8 апреля 2014 г. 18:29
    8 апреля 2014 г. 18:28
    Отвечающий
  • Я тоже подумал что какая то заморочка с мониторами. Но на одномониторном ПК такая же проблема.

    Попробывал класс Win32_VideoController, тоже самое. Возвращает null.

    Есть мысль что может это зависит от типо разъёма, к которому подключен монитор. Имеются ввиду видео карты с выходами VGA и DVI. Собственно тогда вопрос как это информацию получить от класса.

    9 апреля 2014 г. 4:23
  • Я тоже подумал что какая то заморочка с мониторами. Но на одномониторном ПК такая же проблема.

    Попробывал класс Win32_VideoController, тоже самое. Возвращает null.

    Есть мысль что может это зависит от типо разъёма, к которому подключен монитор. Имеются ввиду видео карты с выходами VGA и DVI. Собственно тогда вопрос как это информацию получить от класса.

    9 апреля 2014 г. 4:23
  • Можно попробовать WmiMonitorConnectionParams и свойство VideoOutputTechnology - значения D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY

    typedef enum _D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY { 
      D3DKMDT_VOT_UNINITIALIZED         = -2,
      D3DKMDT_VOT_OTHER                 = -1,
      D3DKMDT_VOT_HD15                  = 0,
      D3DKMDT_VOT_SVIDEO                = 1,
      D3DKMDT_VOT_COMPOSITE_VIDEO       = 2,
      D3DKMDT_VOT_COMPONENT_VIDEO       = 3,
      D3DKMDT_VOT_DVI                   = 4,
      D3DKMDT_VOT_HDMI                  = 5,
      D3DKMDT_VOT_LVDS                  = 6,
      D3DKMDT_VOT_D_JPN                 = 8,
      D3DKMDT_VOT_SDI                   = 9,
      D3DKMDT_VOT_DISPLAYPORT_EXTERNAL  = 10,
      D3DKMDT_VOT_DISPLAYPORT_EMBEDDED  = 11,
      D3DKMDT_VOT_UDI_EXTERNAL          = 12,
      D3DKMDT_VOT_UDI_EMBEDDED          = 13,
      D3DKMDT_VOT_SDTVDONGLE            = 14,
    #if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3_M1)
      D3DKMDT_VOT_MIRACAST              = 15,
    #endif 
      D3DKMDT_VOT_INTERNAL              = 0x80000000,
      D3DKMDT_VOT_SVIDEO_4PIN           = D3DKMDT_VOT_SVIDEO,
      D3DKMDT_VOT_SVIDEO_7PIN           = D3DKMDT_VOT_SVIDEO,
      D3DKMDT_VOT_RF                    = D3DKMDT_VOT_COMPOSITE_VIDEO,
      D3DKMDT_VOT_RCA_3COMPONENT        = D3DKMDT_VOT_COMPONENT_VIDEO,
      D3DKMDT_VOT_BNC                   = D3DKMDT_VOT_COMPONENT_VIDEO
    } D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY;

    У меня:

    PS > (Get-WmiObject -Class WmiMonitorConnectionParams -Namespace Root\Wmi).VideoOutputTechnology
    0
    Еще можно попробовать класс WmiMonitorBasicDisplayParams,но значения свойств будут в сантиметрах.


    • Изменено KazunEditor 9 апреля 2014 г. 4:59
    9 апреля 2014 г. 4:53
    Отвечающий
  • Попробывал. Тоже самое.
    9 апреля 2014 г. 5:48
  • Со всеми классами одна и та же проблема. Кроме Win32_DisplayConfiguration. Класс Win32_DisplayConfiguration возвращает высоту и длину экрана, но почему то не всегда правильную
    10 апреля 2014 г. 4:50
  • Попробуйте метод с vbs:

    with createobject("internetexplorer.application")
        .navigate "about:blank"
        with .document.parentWindow.screen
          msgbox "background" & .width & "x"  & .height & ".jpg"
        end with
    end with

    • Помечено в качестве ответа KazunEditor 5 мая 2014 г. 7:18
    10 апреля 2014 г. 7:25
    Отвечающий