首先上python代码
import win32api
import win32con
import time
import keyboard
def change_display_direction(angle):
device = win32api.EnumDisplayDevices(None,0)
dm = win32api.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
cx = dm.PelsWidth
cy = dm.PelsHeight
if angle == 90:
dm.DisplayOrientation = win32con.DMDO_90
if cx > cy:
dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
if angle == 180:
dm.DisplayOrientation = win32con.DMDO_180
if cx < cy:
dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
if angle == 270:
dm.DisplayOrientation = win32con.DMDO_270
if cx > cy:
dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
if angle == 0:
dm.DisplayOrientation = win32con.DMDO_DEFAULT
if cx < cy:
dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
win32api.ChangeDisplaySettingsEx(device.DeviceName,dm)
def main():
keyboard.add_hotkey('ctrl+alt+up', change_display_direction,args=(0,))
keyboard.add_hotkey('ctrl+alt+left', change_display_direction,args=(90,))
keyboard.add_hotkey('ctrl+alt+down', change_display_direction,args=(180,))
keyboard.add_hotkey('ctrl+alt+right', change_display_direction,args=(270,))
while(True):
time.sleep(1)
return
if __name__ == '__main__':
main()
讲一下这里其中的要点:
一共三个关键函数:
EnumDisplayDevices 列出主屏幕
EnumDisplaySettings 得到当前屏幕设置
ChangeDisplaySettingsEx 修改屏幕设置
注意只修改屏幕显示方向是不够的,还要修改逻辑分辨率,不然逻辑分辨率不匹配屏幕也转不过来。
接下来用cpp试试。
在看winapi文档的时候千万别用中文,不然看下面
官方翻译成了
非常迷惑人
写完后如下
#include <cstdio>
#include <iostream>
#include <Windows.h>
using namespace std;
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#define myhotkey1 1018
#define myhotkey2 1019
#define myhotkey3 1020
#define myhotkey4 1021
int change_display_direction(int angle)
{