Что нового

Разрешение экрана

Статус
Закрыто для дальнейших ответов.

edyapd

Осваивающий
Сообщения
380
Репутация
30
Есть два вопроса:
1. Можно ли узнать поддерживаемые разрешения?
2. И есть ли возможность переключить разрешение экрана?

На сайте ни чего не нашел, или плохо искал.
А в хелп нашел только текущие разрешение.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Думаю, вам подойдёт для этих целей UDF - ChangeScreenRes.au3 и функция _ChangeScreenRes()
Вот тут есть информация по этому делу.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Список поддерживаемых разрешений можно получить так:

Код:
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $i = 0, $Data

While 1
	$Data = _WinAPI_EnumDisplaySettings('', $i)
	If IsArray($Data) Then
		ConsoleWrite($Data[0] & ' x ' & $Data[1] & ' x ' & $Data[2] & ' bit' & @CR)
	Else
		ExitLoop
	EndIf
	$i += 1
WEnd

$Data = _WinAPI_EnumDisplaySettings('', $ENUM_CURRENT_SETTINGS)
ConsoleWrite('-------------------------------' & @CR)
ConsoleWrite('Current settings: ' & $Data[0] & ' x ' & $Data[1] & ' x ' & $Data[2] & ' bit' & @CR)


WinAPIEx.au3
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Спасибо за ответ.
Только сразу возникло еще 2 вопроса
1. ConsoleWrite - команда не выводит на экран? У меня просто выполняется скрипт без вывода.
2. Что означает: [4] - The device's display mode ($DM_...) - в функции _WinAPI_EnumDisplaySettings.
У меня выводит 0 при текущем разрешении.

А менять разрешение ни как?


Добавлено:
Сообщение автоматически объединено:

Garrett сказал(а):
Думаю, вам подойдёт для этих целей UDF - ChangeScreenRes.au3 и функция _ChangeScreenRes()
Вот тут есть информация по этому делу.
Увы с английским я не в ладах.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Вот пример:
Код:
#include <Constants.au3>
#include <ChangeScreenRes.au3>
#include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $aData1, $aData2, $iWidth1 = 800, $iHeight1 = 600
	
	$aData1 = _WinAPI_EnumDisplaySettings('', $ENUM_CURRENT_SETTINGS)
	MsgBox(0,"Текущее значение:",$aData1[0] & ' x ' & $aData1[1])
	_ChangeScreenRes($iWidth1, $iHeight1)
	$aData2 = _WinAPI_EnumDisplaySettings('', $ENUM_CURRENT_SETTINGS)
	MsgBox( 4096, "Новое значение:", $aData2[0] & ' x ' & $aData2[1])
	_ChangeScreenRes($aData1[0], $aData1[1])
	MsgBox( 4096, "Восстановленное значение:", $aData1[0] & ' x ' & $aData1[1])
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Нашел здесь: http://forum.oszone.net/post-546384-181.html

Код:
; Пример использования функции
_DisplaySetRes (1024, 768, 32, 75)

; Функция изменения видеорежима (для одного монитора)
Func _DisplaySetRes ($width, $height, $depth, $freq)
    Local $dev = DllStructCreate ("byte[32];int[10];byte[32];int[6]")
    ; Возвращаем текущее состояние устройства
    Local $ret = DLLCall ('user32.dll', 'int', 'EnumDisplaySettings', _
        'ptr' , 0, _
        'long', 0, _
        'ptr' , DllStructGetPtr ($dev) )
    If @error Then Return 0
    If $ret[0]=0 Then Return 0
    ; Правим нужные элементы структуры
    DllStructSetData ($dev, 4, $depth, 1)
    DllStructSetData ($dev, 4, $width, 2)
    DllStructSetData ($dev, 4, $height, 3)
    DllStructSetData ($dev, 4, $freq, 5)
    ; Проверяем корректность параметров
    $ret = DllCall ('user32.dll', 'int', 'ChangeDisplaySettings', _
        'ptr', DllStructGetPtr ($dev), _
        'int', 2 )
    If @error Then  Return 0
    ; Если все ОК - применяем новые параметры
    If $ret[0] =0 Then
        $ret = DllCall ('user32.dll', 'int', 'ChangeDisplaySettings', _
            'ptr', DllStructGetPtr ($dev), _
            'int', 1 )
        If @error Then  Return 0
        Return 1
    Else
        Return -1
    EndIf
EndFunc

Еще не разбирался как работает, но проверил переключает.
Тему можно закрывать.
 

Siroga00VII

Siroga
Сообщения
33
Репутация
-2
Как изменить размер без передвижения ярлыков
надо для игры срочно :scratch:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Siroga00VII,
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 

Fantasy22

Новичок
Сообщения
11
Репутация
0
Подскажите как из функции _WinAPI_EnumDisplaySettings передать список поддерживаемых разрешений экрана в Combo, а потом из него уже изменять разрешение.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Fantasy22

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Статус
Закрыто для дальнейших ответов.
Верх