본문 바로가기

컴퓨터&인터넷

[펌] 모니터 입력소스(DVI/HDMI) 변경을 PC 단축키로 하기

 

모니터 한대에 PC 2대를 연결해서 사용하고 있는데 모니터 아래 메뉴 버튼을 눌러 입력소스를 바꾸는게 귀찮고 불편하다.

모니터 인풋소스를 변경하는 소프트웨어가 있는지 찾아봤는데 모니터 모델, 기능 유무에 따라 가능한게 있고 안되는 것도 있다.

 

현재 사용중인 모니터는 지원되지 않는 것 같다. 게다가 VGA/HDMI 로 연결되어 있는데 VGA케이블 입력은 안된다고한다.

 

 

자세한 내용은 아래 링크에서.

 

- PC에서 단축키로 모니터의 입력소스(DVI/HDMI) 변경하기

https://www.clien.net/service/board/lecture/9611475

 

- Virtual KVM

https://moshen.net/posts/virtual_kvm/

 

- https://brainwreckedtech.wordpress.com/2010/08/03/automatically-switch-between-monitor-inputs/

 

- https://forums.overclockers.com.au/threads/software-to-change-input-source-on-monitor.958698/

 

- http://www.inputdirector.com/

 

- http://www.nirsoft.net/utils/multi_monitor_tool.html

 

 

더보기

팁과강좌

PC/모바일 [미립자팁?] PC에서 단축키로 모니터의 입력소스(DVI/HDMI) 변경하기

 

2016-09-08 수정일: 2017-04-29

https://www.clien.net/service/board/lecture/9611475

 

모니터에 DDC/CI라는 PC에서 모니터의 설정을 제어할 수 있는 규격이 있습니다.

보통 캘리브레이션을 할 때 많이 사용하는것 같더군요.

이제 이 인터페이스를 이용하여 간편하게 PC에서 Input Source를 변경할 수 있도록 해봅시다.

 

- 준비물

 

1. AutoHotkey - 다운링크:https://www.autohotkey.com

매크로 프로그램입니다. 단축키와 실제 신호전달하는 소스를 실행시키기 위해 사용합니다.

참고로 해당 프로그램은 정말 좋은 매크로 프로그램입니다. 용도도 무궁무진하구요. 

관심있으신 분들은 "http://v1.autohotkey.co.kr " 여기서 정보를 더 찾아보시면 좋을듯합니다.

 

2. softMCCS - 다운링크:http://www.entechtaiwan.com/lib/softmccs.shtm

홈페이지 왼쪽에 softMCCS 라는 링크를 클릭하여 다운로드 해주세요.

위 프로그램은 DDC/CI로 모니터를 제어할 수 있는 다양한 기능을 제공하고있는 프로그램입니다.

이번 팁에서는 본인의 모니터가 해당 규격을 지원하는지 여부와 VCP CODE를 알아내기 위해서만 사용하겠습니다.

 

3. 첨부스크립트 소스

AutoHotkey 매크로 스크립트입니다. AutoHotkey를 설치한 뒤 실행시키면 매크로프로그램이 실행됩니다.

 

- 시작

 

1. 우선 softMCCS를 설치한 뒤 실행해보세요. 가운데쯤에 불길한 붉은색 글씨로 'Not Supported'라고 뜨면 안되는겁니다.

노트북이나 듀얼모니터의 경우 전환을 원하는 모니터를 먼저 선택하셔야 합니다.

 

2. 지원이 된다고 하면 AutoHotkey를 설치한 뒤 스크립트 소스를 실행합니다.

 

3. WIN+X를 눌러 전환이 잘 되는지 확인합니다. 잘되면 다른수정이 필요없이 그대로 사용하시면 되겠습니다.

 

4. 전환이 안될경우 2가지 경우의 수가 있습니다. 

 

4.1 디스플레이 코드가 맞지 않아서 발생한 문제

WIN+Y키를 눌러 디스플레이 코드를 알아냅니다. DVI/HDMI를 전환해 가면서 알아낸 뒤 적어둡시다.

스크립트 소스를 살포시 열어 다음 코드를 수정해줍시다. 간단한 수술이니 겁내지 마시구요.

---------------------------------------

    #x::

 

    if(getMonitorInputSource() > 3)

 

       setMonitorInputSource(3)

 

    else

 

       setMonitorInputSource(17)

 

    return

 

-------------------------------------------

 

현재 설정값은 DVI = 3, HDMI = 17 입니다. 본인에게 맞는 디스플레이 코드로 변경해줍시다.

트레이 아이콘에 보면 AutoHotkey 아이콘이 있습니다. 마우스 오른쪽을 눌러 Reload 해주세요.

 

4.2 VCP 코드가 맞지 않아 발생한 문제.

softMCCS를 실행시켜 본인의 VCP 코드를 알아냅니다.

스크립트에서 다음 문장의 VCP 코드로 수정해줍시다. 2군데 있으니 잘 찾아서 고쳐주세요.

-------------------------------------

 

        , "char", 0x60 ;VCP code for Input Source Select

 

-------------------------------------

 

트레이 아이콘에 보면 AutoHotkey 아이콘이 있습니다. 마우스 오른쪽을 눌러 Reload 해주세요.

 

PS1. DVI/HDMI로 연결된 PC에서만 제어가 가능합니다.

 

PS2. 스크립트에서 필요로 하는 VCP코드는 softMCCS에 나와있는것과 다를 수 있습니다. 그 땐 인터넷에서 본인의 모니터의 코드를 찾아주세요.

 

PS3. 듀얼모니터의 경우 현재 마우스가 위치한곳의 모니터값을 가져오고 변경하도록 짜여있습니다. 특정모니터를 고정으로 변경하시려면 스크립트에서 모니터 포지션을 강제로 셋팅해주세요.

 

===== 댓글 =====

 

+ pc두대에 한 모니터 연결해 놓으면 두군데 다 설치를 해야겠군요

좋은팁 감사합니다

 

+ 와 이거 신세계네요ㅋㅋㅋㅋ 꿀팁 감사합니다.

 

+ 근데 혹시 단축키를 변경할 수 있는 방법은 없을까요??

 

+ 간단하게 설명해드리자면

---------------------------

#x:: <- 이 부분을 변경해주셔야 하는데 

if(getMonitorInputSource() > 3)

setMonitorInputSource(3)

else

setMonitorInputSource(17)

return

----------------------------

조합키:

# = win key

^ = ctrl key 

! = alt key 

+ = shift key 

 

만약 ctrl + alt + c 키를 단축키로 설정하고 싶다면

^!c:: 로 변경해주시면 됩니다.

자세한 단축키 작성방법은 아래 문서에서 보시면 됩니다. 

https://autohotkey.com/docs/Hotkeys.htm 

https://autohotkey.com/docs/KeyList.htm

 

+ 맥용도 있으면 좋겠네요.

 

+ d-suv / dvi로 연결해서 사용중이라 적용하긴 어렵지만

좋은정보 알아갑니다 감사해요 ㅎㅎ

 

+ 찾고있던 내용인데 너무 감사합니다!

 

+ 오래되어서 그런지 첨부파일이 없네요? 제가 못찾고 있는건지...

 

+ 저도 써보고 싶은데 스크립트 소스가 없네요 ㅠㅠ

 

 

 

//////////////////////////////////////////////////////////////////////////////////////////////

 

https://moshen.net/posts/virtual_kvm/

 

Virtual KVM

November 15th 2017

Tags: utilites

 

My current setup includes a desktop computer running Windows, and a work laptop running MacOS. In order to keep my desktop uncluttered, I have devised a virtual KVM using Synergy (1.8) and AutoHotKey. The aim was to use a single monitor, mouse and keyboard with these two systems.

 

Sure, I could have sprung for two monitors, though I have a nice Asus 27" 2k and little room (or budget) for much else.

 

First, let's look at how things are connected:

 

Virtual KVM setup

 

The desktop can actually send commands to the monitor over the DVI connection using something called "Display Data Channel". This capability lets tell our monitor to switch to another input. Some googling around on how to script this, lead me to this post in the AutoHotKey forums. From there, I was able to figure out the input "source numbers" through trial and error. Finally, I bind the hotkeys to Ctrl+Alt+[ and Ctrl+Alt+], which are the same hotkeys I used to switch computers in Synergy.

 

https://en.wikipedia.org/wiki/Display_Data_Channel

https://autohotkey.com/board/topic/96884-change-monitor-input-source/

 

The final AutoHotKey script:

 

; From: https://autohotkey.com/board/topic/96884-change-monitor-input-source/

 

; Finds monitor handle

getMonitorHandle()

{

  ; Initialize Monitor handle

  hMon := DllCall("MonitorFromPoint"

    , "int64", 0 ; point on monitor

    , "uint", 1) ; flag to return primary monitor on failure

 

 

  ; Get Physical Monitor from handle

  VarSetCapacity(Physical_Monitor, 8 + 256, 0)

 

  DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"

    , "int", hMon   ; monitor handle

    , "uint", 1   ; monitor array size

    , "int", &Physical_Monitor)   ; point to array with monitor

 

  return hPhysMon := NumGet(Physical_Monitor)

}

 

destroyMonitorHandle(handle)

{

  DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)

}

 

; Used to change the monitor source

; DVI = 3

; HDMI = 4

; DisplayPort = 15

setMonitorInputSource(source)

{

  handle := getMonitorHandle()

  DllCall("dxva2\SetVCPFeature"

    , "int", handle

    , "char", 0x60 ;VCP code for Input Source Select

    , "uint", source)

  destroyMonitorHandle(handle)

}

 

; Gets Monitor source

getMonitorInputSource()

{

  handle := getMonitorHandle()

  DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"

    , "int", handle

    , "char", 0x60 ;VCP code for Input Source Select

    , "Ptr", 0

    , "uint*", currentValue

    , "uint*", maximumValue)

  destroyMonitorHandle(handle)

  return currentValue

}

 

; Map monitor switch to same keys as synergy keyboard switch

$^![::

  setMonitorInputSource(15)

  Send ^!{[}

return

$^!]::

  setMonitorInputSource(3)

  Send ^!{]}

return

My Synergy config contains this section for setting up the same machine switching hotkeys:

 

section: options

    switchCorners = none 

    switchCornerSize = 0

    keystroke(Alt+Control+[) = ;switchToScreen(laptop-alias)

    keystroke(Alt+Control+]) = ;switchToScreen(desktop-alias)

end

Caveats

Since I'm running Synergy 1.8, this config may not apply to Synergy 2 users. I haven't seen a reason to switch yet, but will post an update to this if I decide to.

 

DDC capabilities are not universal. Some monitor manufacturers may not let you do this.

 

While running the Synergy daemon and AutoHotKey script on the Windows desktop, startup order matters! We need to start AutoHotKey before Synergy or the AutoHotKey keybinding will never fire.

 

I also need to press Ctrl+Alt+] multiple times to get back to my Windows desktop. I think this is because one press triggers Synergy to switch, the next triggers the monitor switch.

 

Does it work?

After all of those caveats... Yes. It does. I use it every day, and I'm using it right now. If Synergy included a monitor switch capability in version 2, I would upgrade in a heartbeat.

 

By Colin Kennedy

 

 

===== 댓글 =====

 

+ My monitors have Display Port and HDMI are there ways to know I am sending the right source number? the current value of getMonitorInputSource is 0 for me. I have iterated up to 22 and it still hasn't change the input. Any Ideas?

 

+ I will amend my post, but check out https://www.nirsoft.net/utils/control_my_monitor.html .

It will give you the possible input number values under "Input Select".

EDIT: Originally said "Input Source"

 

+ I do not see an "Input Source" Code name in my list after downloading and running the utility. Do you think this means I am out of luck with my monitors? I am using dell s2716dg monitors.

 

+ I'm sorry "Input Select". I have to click the monitor name, then the information is loaded:

 

 

+ I do not have a input select option for any of my monitors. I have 3 monitors and I do not see that option for any of them. any ideas? I attached a screen shot of my output

 

 

+ The command may not be implemented on that model. Unfortunately, not all monitor manufacturers implement all available DDC commands.

 

+ HI, I'm totally zero on this can you elaborate for me how to find out the monitor input source ie: HDMI=2 DVI=4

Later edit: I manage to find them by changing one at a time till I found them at 17, 18, 19. Thank you for your script

 

+ That's exactly how I figured out my monitor. Just going through them one at a time. Some open source DDC tools also have libraries of known monitor settings.