"피벗이노"는 화면 방향을 전환할때
display.exe 라는 외부 프로그램을 사용해왔다.
문제는 핵심적인 기능을 담당하는 이 프로그램에 문제가 생기면 아무것도 하지 못한다.
이렇게 프로그램이 분산되어 있으면 결손, 손상, 수정에 어려움이있다.
MDSN에서 개발자들에게 제공해주는
DEVMODE를 이용하면 연결된 디스플레이 정보를 가져와 컨트롤 패널의 디스플레이 설정을 프로그래밍으로 만져볼 수 있다.
실제로 디스플레이와 관련된 응용프로그램이나 드라이브를 운용하기위한 드라이버를 만들때 사용된다.
DEVMODE를 이용해
rotateTO 함수를 만들었다.
작동방식은 오토피벗 기능을 사용할 디스플레이 넘버를 지정해주고 모니터의 현재 방향에 따른 너비와 높이 값 교환 및 회전이다. 이 함수를 이용하면 display.exe에 의존하지 않아도 된다.
파이썬 에서는 win32api를 이용해 DEVMODE를 사용할수 있다.
win32api를 사용하려면 라이브러리가 있어야한다.
pip install pypiwin32
이 함수는
Rotating the Screen in C# 을 참고하여 작성되었다.
Mapping the APIs의 NativeMethods 클래스에 화면 방향에 따른 상수 값이 정해져 있다.
여기서 봐야 할 값들은 다음과 같다.
DMDO_DEFAULT = 0;
DMDO_90 = 1;
DMDO_180 = 2;
DMDO_270 = 3;
이 상수값들이 디스플레이의 회전 방향을 결정해준다.
# Changing Screen Orientation Programmatically
def rotateTO(rotateDic):
display_num = 0 # display 1
device = win32.EnumDisplayDevices(None,display_num)
dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
if 0 != dm:
dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
dm.DisplayOrientation = int(rotateDic/90)
iRet = win32.ChangeDisplaySettings(dm, 0);
if win32con.DISP_CHANGE_SUCCESSFUL != iRet:
print("Failed(Already) to rotate "+str(rotateDic)+" degrees")
return win32.ChangeDisplaySettingsEx(device.DeviceName,dm)
# this code referred from "https://docs.microsoft.com/ko-kr/previous-versions/ms812499(v=msdn.10)"
| cs |
위 함수는 rotateDic로 부터 값을 받아와 해당 방향으로 화면 방향을 바꿔준다.
rotateDic는 다음과 같다 "{"Right":"90", "Idle":"0", "Left":"270"}"
rotateTO는 피버시노 디바이스로 부터 밭은 시리얼 값을 rotateDic을 통해 각도(90, 0, 270)로 알려주는데 이 를 90으로 나누어 사용하면된다.
다음은 시스템 자원을 얼마나 사용하는지 알아봤다.
일반적인 작업 환경에서 사용하는 디바이스이기 때문에 작업중인 프로그램들은 종료하지 않았다.
1. 피벗이노가 놀고 있을때
Comments
Post a Comment
좋은하루되세요. ^^