1 (изменено: AirKite, 2013-06-12 23:00:55)

Тема: AHK: Активация и деактивация второго монитора (нужна реализация).

Здравствуйте! Кто может подсказать, метод для включения\выключения второго экрана.
http://f3.s.qip.ru/13ASQaVyu.jpg
Заранее спасибо!

2

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

На 7 так проще:


Run DisplaySwitch.exe /internal ; первый монитор
Run DisplaySwitch.exe /external ; второй монитор
Run DisplaySwitch.exe /extend ; Dual Wiev
Run DisplaySwitch.exe /clone ; Clone
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Требуется для Windows XP и именно активация\деактивация а не переключение главного монитора и режимов...

4

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Что вы подразумеваете под термином "активация\деактивация" ? Опишите порядок действий который вы бы хотели получить, и вам самому станет понятнее.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

5

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Mikki пишет:

Что вы подразумеваете под термином "активация\деактивация" ?

Угу. Интересный вопрос...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Я прикрепил скриншот, выделил чекбокс который регулирует то, что мне нужно. Активация\Деактивация а-ля "расширить рабочий стол на этот монитор", монитор номер 2. По другому это можно объяснить как включение и выключение трансляции чего либо на второй монитор\телевизор.

Пользуюсь вторым экраном, когда мне это нужно. Хотелось бы задать горячею клавишу на выключение второго экрана, дабы работать не всегда приятно, когда курсор заходит за границы. Использовать Clone не вариант.

7

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

AirKite пишет:

именно активация\деактивация а не переключение главного монитора и режимов...

AirKite пишет:

Я прикрепил скриншот, выделил чекбокс который регулирует то, что мне нужно. Активация\Деактивация а-ля "расширить рабочий стол на этот монитор", монитор номер 2. По другому это можно объяснить как включение и выключение трансляции чего либо на второй монитор\телевизор.

В чём отличие от Run DisplaySwitch.exe /extend ; Dual Wiev?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: AirKite, 2013-06-20 20:54:32)

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

serzh82saratov пишет:

В чём отличие от Run DisplaySwitch.exe /extend ; Dual Wiev?

Скорее всего никаких. Что есть "DisplaySwitch.exe"? В оригинальной системе Windows XP SP3 такого файла нет. Откуда его брать?
p.s. Видео карта ATI Radeon 9250

9

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

При нажатии Win+P что-то в ХР происходит?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

В программе-драйвере ATI есть возможность задать горячую клавишу на это действие?

11

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

serzh82saratov пишет:

При нажатии Win+P что-то в ХР происходит?

Ничего не происходит...

ypppu пишет:

В программе-драйвере ATI есть возможность задать горячую клавишу на это действие?

Ничего подобного я не видел. В папке с центром управления ATI, так же искал аналог DisplaySwitch.exe, ничего не нашлось. Поэтому и спрашиваю о реализации через AHK, посредством вызова какого либо системного запроса, аналогичный выполнению при (Раб.стол -> Свойства -> Параметры -> Монитор 2 -> Расширить рабочий стол на этот монитор).

12

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Можно так: (сам не проверял)

Run, RUNDLL32.EXE shell32.dll`,Control_RunDLL desk.cpl`,`,3
WinWait, Display Properties ahk_class #32770
Send, !d2!e!a ;2 stands for second monitor
Sleep, 500
Send, !e!a
WinWait, Monitor Settings ahk_class #32770
IfWinNotActive, Monitor Settings ahk_class #32770,,,,WinActivate, Monitor Settings ahk_class #32770
WinWaitActive, Monitor Settings ahk_class #32770
Send, !y
WinWaitActive, Display Properties ahk_class #32770
WinClose, Display Properties ahk_class #32770

Либо воспользоваться программой:
http://nod5.dcmembers.com/tv_out.html

13 (изменено: AirKite, 2013-06-24 01:58:33)

Re: AHK: Активация и деактивация второго монитора (нужна реализация).

Malcev, спасибо. Программа tv_out написанная на AutoHotKey, что нужно!

Кстати, вот EnableDisplayDevice от некого superfraggle, что и была использована в программе tv_out. Функция позволяет управлять вкл\выкл мониторами, причём как я понял не сохраняя настроек в системе (на ваше усмотрение).


;-----------------------------------
;--- by superfraggle
;--- http://www.autohotkey.com/board/topic/20084-secondary-monitor/?p=180370
;
; Enables, disables or toggles a display device. 
; 
; DeviceName:   The name of the device, e.g. \\.\DISPLAY1 
;               Alternatively, it can be the index of the device, which might 
;               not be the same as the number shown in Display Settings. 
; Action:       The action to take. 
;                    0   Disable (false is synonymous with 0) 
;                    1   Enable (true is synonymous with 1) 
;                   -1   Toggle 
; NoReset:      If true, settings will be saved to the registry, but not applied. 
; 
; The following can be used to apply settings saved in the registry: 
;   DllCall("ChangeDisplaySettings", "uint", 0, "uint", 1) 
; 
; Return values: 
;    DISP_CHANGE_SUCCESSFUL       0 
;    DISP_CHANGE_RESTART          1 
;    DISP_CHANGE_FAILED          -1 
;    DISP_CHANGE_BADMODE         -2 
;    DISP_CHANGE_NOTUPDATED      -3 
;    DISP_CHANGE_BADFLAGS        -4 
;    DISP_CHANGE_BADPARAM        -5 
; 

EnableDisplayDevice(DeviceName, Action=1, NoReset=false) 
{ 
    if (Action = -1) || (DeviceName+0 != "") 
    { 
        VarSetCapacity(DisplayDevice, 424), NumPut(424, DisplayDevice, 0) 
        VarSetCapacity(ThisDeviceName, 32, 0) 
        Index = 0 
        Loop { 
            if !DllCall("EnumDisplayDevices", "UInt", 0, "UInt", A_Index-1, "UInt", &DisplayDevice, "UInt", 0) 
                return -5 
            ThisDeviceState := NumGet(DisplayDevice, 164) 
            Index += 1 
            DllCall("lstrcpynA", "Str", ThisDeviceName, "UInt", &DisplayDevice+4, "int", 32) 
            if (DeviceName = Index || DeviceName = ThisDeviceName) 
            { 
                if Action = -1 
                    Action := !(ThisDeviceState & 1) 
                DeviceName := ThisDeviceName 
                break 
            } 
        } 
    } 
    VarSetCapacity(devmode, 156, 0), NumPut(156, devmode, 36, "UShort") 
    if (Action){ 
        NumPut(0x000020, devmode, 40) ; Enable by setting position = {0,0} 
        VarSetCapacity(Point,8,0) 
        Numput(A_ScreenWidth + 1,Point) 
        Numput(&point,devmode,44) 
    } 
    else 
        NumPut(0x180020, devmode, 40) ; Disable by setting size = {0,0} 
    err := DllCall("ChangeDisplaySettingsEx", "str", DeviceName, "uint", &devmode, "uint", 0, "uint", 0x10000001, "uint", 0) 
    if !err && !NoReset 
        err := DllCall("ChangeDisplaySettings", "uint", 0, "uint", 1) 
    return err, ErrorLevel:=Action 
}