|
| 1 | +program DisplayControl; |
| 2 | + |
| 3 | +{$APPTYPE CONSOLE} |
| 4 | +{$R *.res} |
| 5 | + |
| 6 | +uses |
| 7 | + Windows, SysUtils, Registry; |
| 8 | + |
| 9 | +const |
| 10 | + EDD_GET_DEVICE_INTERFACE_NAME = 1; |
| 11 | + ENUM_REGISTRY_SETTINGS = DWORD(-2); |
| 12 | + |
| 13 | +procedure ScreenEnable(dwIndex: integer); |
| 14 | +var |
| 15 | + Display: TDisplayDevice; |
| 16 | + DevMode: TDevMode; |
| 17 | +begin |
| 18 | + Display.cb:=SizeOf(TDisplayDevice); |
| 19 | + EnumDisplayDevices(nil, dwIndex, Display, EDD_GET_DEVICE_INTERFACE_NAME); |
| 20 | + EnumDisplaySettings(PChar(@Display.DeviceName[0]), ENUM_REGISTRY_SETTINGS, DevMode); |
| 21 | + DevMode.dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY or DM_DISPLAYFLAGS or DM_POSITION; |
| 22 | + if (Display.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE) <> DISPLAY_DEVICE_PRIMARY_DEVICE then begin |
| 23 | + ChangeDisplaySettingsEx(PChar(@Display.DeviceName[0]), DevMode, 0, CDS_UPDATEREGISTRY or CDS_NORESET, nil); |
| 24 | + ChangeDisplaySettingsEx(nil, PDevMode(nil)^, 0, 0, nil); |
| 25 | + end; |
| 26 | +end; |
| 27 | + |
| 28 | +procedure ScreenDisable(dwIndex: integer); |
| 29 | +var |
| 30 | + Display: TDisplayDevice; |
| 31 | + DevMode: TDevMode; |
| 32 | +begin |
| 33 | + Display.cb:=SizeOf(TDisplayDevice); |
| 34 | + EnumDisplayDevices(nil, dwIndex, Display, EDD_GET_DEVICE_INTERFACE_NAME); |
| 35 | + ZeroMemory(@DevMode, SizeOf(TDevMode)); |
| 36 | + DevMode.dmSize:=SizeOf(TDevMode); |
| 37 | + DevMode.dmBitsPerPel:=32; |
| 38 | + DevMode.dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY or DM_DISPLAYFLAGS or DM_POSITION; |
| 39 | + if (Display.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE) <> DISPLAY_DEVICE_PRIMARY_DEVICE then begin |
| 40 | + ChangeDisplaySettingsEx(PChar(@Display.DeviceName[0]), DevMode, 0, CDS_UPDATEREGISTRY or CDS_NORESET, nil); |
| 41 | + ChangeDisplaySettingsEx(nil, PDevMode(nil)^, 0, 0, nil); |
| 42 | + end; |
| 43 | +end; |
| 44 | + |
| 45 | +var |
| 46 | + Reg: TRegistry; |
| 47 | +begin |
| 48 | + Reg:=TRegistry.Create; |
| 49 | + Reg.RootKey:=HKEY_CURRENT_USER; |
| 50 | + if Reg.OpenKey('\Software\TrueOpenVR', false) = true then begin |
| 51 | + if AnsiLowerCase(ParamStr(1)) = '/on' then ScreenEnable(Reg.ReadInteger('ScreenIndex') - 1); |
| 52 | + if AnsiLowerCase(ParamStr(1)) = '/off' then ScreenDisable(Reg.ReadInteger('ScreenIndex') - 1); |
| 53 | + end; |
| 54 | + Reg.CloseKey; |
| 55 | + Reg.Free; |
| 56 | +end. |
0 commit comments