[Arduino] - 디스플레이 오토피벗 디바이스 "피버시노" 파이썬 프로그램 업데이트 (피버시노 v.1.1.2)
"피벗이노"는 화면 방향을 전환할때 display.exe 라는 외부 프로그램을 사용해왔다.
문제는 핵심적인 기능을 담당하는 이 프로그램에 문제가 생기면 아무것도 하지 못한다.
이렇게 프로그램이 분산되어 있으면 결손, 손상, 수정에 어려움이있다.
MDSN에서 개발자들에게 제공해주는 DEVMODE를 이용하면 연결된 디스플레이 정보를 가져와 컨트롤 패널의 디스플레이 설정을 프로그래밍으로 만져볼 수 있다.
실제로 디스플레이와 관련된 응용프로그램이나 드라이브를 운용하기위한 드라이버를 만들때 사용된다.
DEVMODE를 이용해 rotateTO 함수를 만들었다.
- rotateTO 함수
파이썬 에서는 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으로 나누어 사용하면된다.
- 점유율
일반적인 작업 환경에서 사용하는 디바이스이기 때문에 작업중인 프로그램들은 종료하지 않았다.
2. 피벗이노가 열일 할 때( 1분동안 마구 흔들었다.)
메모리 점유율은 빌드시 5.1MB 정도이고 CPU는 1~3% 정도이다.
실사용에서 1분동안 모니터를 마구 회전해서 사용하는 상황은 극히 드물기 때문에
컴퓨터 이용에 장애가되는 일은 발생하지 않는다.
- 업데이트 버전
피버시노 v1.0
피버시노 v1.1
피버시노 v1.1.1
피버시노 v1.1.2
피버시노 v1.1.3
Comments
Post a Comment
좋은하루되세요. ^^