var
DeviceMode: TDeviceMode;result:integer;
begin
EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
result:=DeviceMode.dmDisplayFrequency;
showmessage(inttostr(result)+'hz'); {捕获屏幕刷新率}
var
DeviceMode:TDeviceMode;result,iFrequency:integer;
begin
iFrequency:=85;
EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
result:=ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
end; {改
function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;
/////////////////////////////////////
{Delphi 引入的定义是错误的,必须手工引入}
function ChangeDisplaySettings(lpDevMode: PDeviceMode;
dwFlags: DWORD): Longint; stdcall;
var
Form1: TForm1;
DevModeArray: TList; // 显示模式信息结构列表
implementation
uses Math;
{$R *.DFM}
{引入函数}
function ChangeDisplaySettings; external user32 name 'ChangeDisplaySettingsA';
procedure TForm1.FormCreate(Sender: TObject);
var
DevModeCount: Integer; // tracks the number of display modes
DevModeInfo: ^TDevMode; // a pointer to display mode information
begin
DevModeArray := TList.Create;
DevModeCount := 0;
GetMem(DevModeInfo, SizeOf(TDevMode));
{枚举显示模式}
while EnumDisplaySettings(NIL, DevModeCount, DevModeInfo^) do
begin
DevModeArray.Add(DevModeInfo);
procedure TForm1.FormDestroy(Sender: TObject);
var
iCount: Integer;
begin
for iCount := 0 to DevModeArray.Count-1 do
FreeMem(DevModeArray.Items[iCount], SizeOf(TDevMode));
DevModeArray.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ModeChange: Longint; //表明是否需要重起
begin
{change the display mode}
ModeChange:=ChangeDisplaySettings(DevModeArray[ListBox1.ItemIndex],
CDS_UPDATEREGISTRY);
{可否动态改变分辨率}
if ModeChange=DISP_CHANGE_SUCCESSFUL then
ShowMessage('动态改变成功');
if ModeChange=DISP_CHANGE_RESTART then
ShowMessage('需要重起');
end;
function Resolution(X,Y:word):boolean;
var
DevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,DevMode);
if Result then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
DevMode.dmPelsWidth:=X;
DevMode.dmPelsHeight:=Y;
Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Resolution(800,600) then ShowMessage('800×600模式!');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Resolution(1280,1024) then ShowMessage('1280X1024模式!');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if Resolution(1024,768) then ShowMessage('1024X768模式!');
end;