program aqr;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
function ChangeDisplaySettings2(lpDevMode: Pointer; dwFlags: DWORD): Longint; stdcall; external user32 name 'ChangeDisplaySettingsA';
var
DevMode: TDeviceMode;
Flags: Cardinal;
Result: LongInt;
Switches: record
Help: Boolean; // -f
Width: Boolean; // -wx
Height: Boolean; // -hx
Colors: Boolean; // -cx
Frequency: Boolean; // -fx
TestOnly: Boolean; // -t
MakePermanent: Boolean; // -p
Restore: Boolean; // -r
end;
Values: record
Width: DWORD;
Height: DWORD;
Colors: DWORD;
Frequency: DWORD;
end;
i, L: Integer;
aParam: string;
ExitStatus: string;
begin
Writeln('Resolation Changer');
Writeln('(C) 2004 Pardis Rayaneh Chaloos');
Writeln('');
try
with Switches do
begin
Help := False;
Width := False;
Height := False;
Colors := False;
Frequency := False;
TestOnly := False;
MakePermanent := False;
Restore := False;
end;
try
for i := 1 to ParamCount do
begin
aParam := ParamStr(i);
L := Length(aParam);
if(L > 1) then
begin
if aParam[1] <> '-' then
begin
Switches.Help := True;
Break;
end else
case aParam[2] of
'w':
begin
Switches.Width := True;
Values.Width := StrToInt(Copy(aParam, 3, L));
end;
'h':
begin
Switches.Height := True;
Values.Height := StrToInt(Copy(aParam, 3, L));
end;
'c':
begin
Switches.Colors := True;
Values.Colors := StrToInt(Copy(aParam, 3, L));
end;
'f':
begin
Switches.Frequency := True;
Values.Frequency := StrToInt(Copy(aParam, 3, L));
end;
't':
begin
Switches.TestOnly := True;
end;
'p':
begin
Switches.MakePermanent := True;
end;
'r':
begin
Switches.Restore := True;
end;
else
Switches.Help := True;
Break;
end;
end;
end;
except
Switches.Help := True;
end;
if (ParamCount = 0) or (Switches.Help) then
begin
Writeln('Morteza Ranjbar');
end else
begin
FillChar(DevMode, SizeOf(DevMode), #0);
DevMode.dmSize := SizeOf(DevMode);
if Switches.Width then
begin
DevMode.dmPelsWidth := Values.Width;
DevMode.dmFields := DevMode.dmFields or DM_PELSWIDTH;
end;
if Switches.Height then
begin
DevMode.dmPelsHeight := Values.Height;
DevMode.dmFields := DevMode.dmFields or DM_PELSHEIGHT;
end;
if Switches.Colors then
begin
DevMode.dmBitsPerPel := Values.Colors;
DevMode.dmFields := DevMode.dmFields or DM_BITSPERPEL;
end;
if Switches.Frequency then
begin
DevMode.dmDisplayFrequency := Values.Frequency;
DevMode.dmFields := DevMode.dmFields or DM_DISPLAYFREQUENCY;
end;
if Switches.TestOnly then
begin
Flags := CDS_TEST;
end else
if Switches.MakePermanent then
begin
Flags := CDS_UPDATEREGISTRY;
end else
Flags := 0;
if Switches.Restore then
Result := ChangeDisplaySettings2(nil, 0)
else
Result := ChangeDisplaySettings2(@DevMode, Flags);
case Result of
DISP_CHANGE_SUCCESSFUL: ExitStatus := 'The settings change was successful.';
DISP_CHANGE_RESTART: ExitStatus := 'The computer must be restarted in order for the graphics mode to work.';
DISP_CHANGE_BADFLAGS: ExitStatus := 'An invalid set of flags was passed in.';
DISP_CHANGE_FAILED: ExitStatus := 'The display driver failed the specified graphics mode.';
DISP_CHANGE_BADMODE: ExitStatus := 'The graphics mode is not supported.';
DISP_CHANGE_NOTUPDATED: ExitStatus := 'Unable to write settings to the registry.';
else
raise Exception.Create(Format('Unexpected result (%d) from ChangeDisplaySettings()', [Result]));
end;
Writeln('Exit Status: ' + ExitStatus);
end;
except
on e: Exception do
Writeln('Exit with Error: ' + e.Message);
end;
end.