1 (изменено: Malcev, 2012-02-03 16:43:58)

Тема: AHK: Изменение разрешения экрана на нестандартное

Откопал такой код, но он переключает разрешения только на стандартные, а мне надо, например 1000 x 800
Подскажите, пожалуйста, что в нем подправить.

cD = 32   ; bits (quality) - you can change to suit your requirments
sW = 1440 ; pixels - you can change to suit your requirments
sH = 900  ; pixels - you can change to suit your requirments
rR = 60   ; Hz (frequency) - you can change to suit your requirments 

ChangeDisplaySettings( cD, sW, sH, rR )

Return

ChangeDisplaySettings( cD, sW, sH, rR ) {
  VarSetCapacity(dM,156,0), NumPut(156,dM,36)
  DllCall( "EnumDisplaySettingsA", UInt,0, UInt,-1, UInt,&dM ), NumPut(0x5c0000,dM,40)
  NumPut(cD,dM,104),  NumPut(sW,dM,108),  NumPut(sH,dM,112),  NumPut(rR,dM,120)
  Return DllCall( "ChangeDisplaySettingsA", UInt,&dM, UInt,0 )
}

Upd. Вопроc снимается - просто надо было добавить нестандартные разрешения в настройках видеокарты.

2 (изменено: Malcev, 2012-02-04 09:29:59)

Re: AHK: Изменение разрешения экрана на нестандартное

Имеется код, который при выходе из скрипта, делает разрешение монитора 1024x768.
Но есть огромная проблема - win7 64, win vista не запоминает эти значения и после Log off опять восстанавливает старые.
То есть
1) запускаем скрипт
2) выходим из него - экран меняется на 1024x768
3) Log off из виндовса
4) Логинимся и у нас опять старое разрешение экрана.
А на winXP всё работает.
В чём же причина?

#Persistent  
OnExit, ExitSub
return

ExitSub:
    cD = 32   ; bits (quality) - you can change to suit your requirments
    sW = 1024 ; pixels - you can change to suit your requirments
    sH = 768  ; pixels - you can change to suit your requirments
    rR = 60   ; Hz (frequency) - you can change to suit your requirments 
 
    ChangeDisplaySettings( cD, sW, sH, rR )
 
    ChangeDisplaySettings( cD, sW, sH, rR )
    {
    VarSetCapacity(dM,156,0), NumPut(156,dM,36)
        DllCall( "EnumDisplaySettingsA", UInt,0, UInt,-1, UInt,&dM ), NumPut(0x5c0000,dM,40)
    NumPut(cD,dM,104),  NumPut(sW,dM,108),  NumPut(sH,dM,112),  NumPut(rR,dM,120)
    Return DllCall( "ChangeDisplaySettingsA", UInt,&dM, UInt,0 )
    }
ExitApp

3

Re: AHK: Изменение разрешения экрана на нестандартное

Malcev, у вас в вызове DllCall( "ChangeDisplaySettingsA", UInt,&dM, UInt,0 ) последний параметр отвечает за сохранение параметров экрана в реестре.
Пруфлинк
Просто замените 0 на 1 и будет вам счастье

4

Re: AHK: Изменение разрешения экрана на нестандартное

Точно, спасибо!!!

5

Re: AHK: Изменение разрешения экрана на нестандартное

Вообще-то надо бы читать описание функций, которые используете. Если, конечно, религия позволяет.

6

Re: AHK: Изменение разрешения экрана на нестандартное

Позволяет-то позволяет, только вот где её найти.
Я перед тем, как тут спрашивать и по офф.форуму ползаю и гуглю.
Весьма длительное время, если что.

7

Re: AHK: Изменение разрешения экрана на нестандартное

Заходим сюда, и в поиск забиваем название функции или структуры и ищем. Если много хлама вылезло, то слева выбираем поиск только в "Документации и статьях".

8

Re: AHK: Изменение разрешения экрана на нестандартное

Да просто в Яндексе можно искать. Даже на русском выдал ссылку: http://vsokovikov.narod.ru/New_MSDN_API … ttings.htm.

9

Re: AHK: Изменение разрешения экрана на нестандартное

У меня очень хорошо работает в Windows 7 x64 код из первого сообщения. Подскажите, что нужно сделать, чтобы он заработал в Windows 7 x32 ???

10

Re: AHK: Изменение разрешения экрана на нестандартное

А x64 и x32 — это относится к интерпретатору AHK или к самой системе?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Изменение разрешения экрана на нестандартное

Сначала я пробовал в Windows 7 x64 с интерпретатором AutoHotkeyU64.exe - всё заработало отлично.


Затем я пробовал в Windows 7 x32 запустить скрипт через
AutoHotkeyA32.exe:

  • сохранял в UTF-8 - не получилось

  • сохранял в ANSI - не получилось

  • сохранял в Юникод - не получилось


Потом я пробовал в Windows 7 x32 запустить скрипт через
AutoHotkeyU32.exe:

  • сохранял в UTF-8 - не получилось

  • сохранял в ANSI - не получилось

  • сохранял в Юникод - не получилось

12

Re: AHK: Изменение разрешения экрана на нестандартное

Попробуй в Windows x64 с 32-битным интерпретатором. Скрипты в любом случае нужно сохранять в UTF-8 с BOM.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: ypppu, 2022-10-20 19:39:13)

Re: AHK: Изменение разрешения экрана на нестандартное

Я попробовал в Windows 7 x64 запустить скрипт через
AutoHotkeyA32.exe:

  • сохранял в UTF-8 - получилось

  • сохранял в ANSI - получилось

  • сохранял в Юникод - получилось


Потом пробовал в Windows 7 x64 запустить скрипт через
AutoHotkeyU32.exe:

  • сохранял в UTF-8 - получилось

  • сохранял в ANSI - получилось

  • сохранял в Юникод - получилось

Остаётся только ещё попробовать сохранять с BOM ?

14

Re: AHK: Изменение разрешения экрана на нестандартное

teadrinker пишет:

Скрипты в любом случае нужно сохранять в UTF-8 с BOM

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Изменение разрешения экрана на нестандартное

Надо смотреть какие ошибки возвращает dllcall.
Винда оригинальная?

16 (изменено: ypppu, 2022-10-20 20:50:17)

Re: AHK: Изменение разрешения экрана на нестандартное

Винда неоригинальная. И Windows 7 x64, и Windows 7 x32 - сборки из одного комплекта.
Как посмотреть ошибки DllCall? Через Script lines most recently executed?

17 (изменено: Malcev, 2022-10-20 22:39:51)

Re: AHK: Изменение разрешения экрана на нестандартное

cD = 32   ; bits (quality) - you can change to suit your requirments
sW = 1440 ; pixels - you can change to suit your requirments
sH = 900  ; pixels - you can change to suit your requirments
rR = 60   ; Hz (frequency) - you can change to suit your requirments 

msgbox % ChangeDisplaySettings( cD, sW, sH, rR )

Return

ChangeDisplaySettings( cD, sW, sH, rR ) {
  VarSetCapacity(dM,156,0), NumPut(156,dM,36)
  msgbox % DllCall( "EnumDisplaySettingsA", UInt,0, UInt,-1, UInt,&dM )
  NumPut(0x5c0000,dM,40), NumPut(cD,dM,104), NumPut(sW,dM,108), NumPut(sH,dM,112), NumPut(rR,dM,120)
  Return DllCall( "ChangeDisplaySettingsA", UInt,&dM, UInt,0 )
}

18

Re: AHK: Изменение разрешения экрана на нестандартное

Malcev, я пробовал запустить скрипт в Windows 7 x32 разными способами:

сохраннённый в ANSI

  • через AutoHotkeyA32.exe

  • через AutoHotkeyU32.exe


сохраннённый в Unicode

  • через AutoHotkeyA32.exe

  • через AutoHotkeyU32.exe


сохраннённый в UTF-8

  • через AutoHotkeyA32.exe

  • через AutoHotkeyU32.exe

Во всех 6 случаях первый msgbox выдавал 1, второй msgbox выдавал -2.

19

Re: AHK: Изменение разрешения экрана на нестандартное

После этого заходите на msdn и читаете что эти функции должны возвращать.
У вас первая функция возвращает ок, а вторая ошибку:

DISP_CHANGE_BADMODE
The graphics mode is not supported.

20

Re: AHK: Изменение разрешения экрана на нестандартное

DISP_CHANGE_BADMODE
The graphics mode is not supported.

Если что, я выбирал режимы из списка стандартных поддерживаемых видеокартой.

Пока что проделал такой эксперимент. Нашёл чистый дистрибутив Windows 7 x32 (не сборка), установил его, запустил скрипт. Скрипт исправно заработал как через AutoHotkeyA32.exe, так и через AutoHotkeyU32.exe без плясок с бубном.

21 (изменено: ypppu, 2022-10-23 18:20:58)

Re: AHK: Изменение разрешения экрана на нестандартное

Сейчас стало совсем непонятно. Взял дистрибутив Windows 7 x32 "сборка". Установил на тот же компьютер, что и вчера. Скрипт из 1го сообщения исправно заработал. При этом msgbox'ы скрипта из 17-го сообщения выдавали то ли 1 и 0, то ли 0 и 1. То есть дистрибутив "сборка" вообще-то нормальный.
Единственное предположение, почему в этот раз заработало: когда я ставил драйверы видеокарты, мне установщик предложил заодно установить то ли NET Framework, то ли Visual C++, и я согласился.

22 (изменено: ypppu, 2022-10-24 19:29:35)

Re: AHK: Изменение разрешения экрана на нестандартное

Решил повторить вчерашний эксперимент.
1) Установил ОС из дистрибутива Windows 7 x32 "сборка". Установил все драйверы, в том числе драйвер встроенной видеокарты. Скрипт не заработал.
2) Воткнул в компьютер видеокарту Nvidia 710 и установил её драйвер.  Скрипт заработал.
3) Вытыкнул из компьютера видеокарту Nvidia 710 и переключился на встроенную видеокарту. Скрипт всё ещё работает!

Полез в Программы --> Программы и компоненты --> Установленные обновления - ничего нового нету от сегодняшней даты.

Посмотрел Программы --> Программы и компоненты - из нового только драйвер видеокарты Nvidia 710. Удалил его, перезагрузил компьютер. При этом скрипт остался рабочим!

Видать драйвер Nvidia что-то такое подсовывает в Windows, что исправляет кривулину. https://i.smiles2k.net/aiwan_smiles/ok.gif

Добавлено:
Посмотрел установочный файл драйвера - в нём имеется dotNetFx40_Full_setup. Наверное он помог.

23

Re: AHK: Изменение разрешения экрана на нестандартное

А зачем вообще пользоваться сборками?

24

Re: AHK: Изменение разрешения экрана на нестандартное

Это бывает нужно, когда устанавливаешь Windows 7 на NVMe-накопитель.

25

Re: AHK: Изменение разрешения экрана на нестандартное

Все это можно сделать самому.
https://winaero.com/how-to-install-wind … -nvme-ssd/

26

Re: AHK: Изменение разрешения экрана на нестандартное

Так-то да. Нужно интегрировать драйвер NVMe-накопителя и USB-3.0. Но когда мне это впервые понадобилось, не было времени на изучение мануалов и на эксперименты. Сборка, которой я пользовался, имела много хороших отзывов, и долгое время не вызывала трудностей. Проблема, с которой я сейчас столкнулся, оказалась решаемой.