救命. (300分)

  • 主题发起人 主题发起人 卷起千堆雪tyn
  • 开始时间 开始时间
不知道,现在也没法试试
 
TO HD_COPY :
; ;函数来了!呵呵!
;
function GetDisplayFrequency: Integer;
var
; DeviceMode: TDeviceMode;
begin
; EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
; Result := DeviceMode.dmDisplayFrequency;
end;
 
如果上面的函数在WIN2K下不能用,那么换个角度看看!
还记得吗?
在WIN98下通过Program Files/DirectX/Setup/DxDiag.exe可以调节设置刷新率。
而在WIN2K下通过winnt/system32/dxdiag.exe也可以实现同样的效果。
所以注册表里应该有相关键值,有人会说是在Control Panel里吗?找了一下没有!
那在哪儿呢?应该在你的显卡在注册表的键值里,我的果然就是这样!
其实说穿了,就是利用DirectX里的DirectDraw来实现控制显示器的刷新率。PowerStrip就是这么做的!
剩下的事就是注册表操作编程的问题了!
没有WIN2K,未经测试!
 
千兄,总算给你搞了点出来.我实在没时间了,要下班了,今天约好要出去玩,所以只试了
win2000下的,win98下的应该差不了许多,麻烦各位兄弟试吧.走了,Good Luck!!
function GetDisplayFrequency: Integer;//得到刷新率,照上面YB_unique兄抄的
var
; DeviceMode: TDeviceMode;
begin
; EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
; Result := DeviceMode.dmDisplayFrequency;
end;

procedure ChangeDisplayFrequency(iFrequency:Integer);//更改刷新率,在Win2000下成功
var
; DeviceMode: TDeviceMode;
begin
; EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
; DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
; ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
end;
 
原来就这么点小问题
 
>>不可能,我的代码在win2000、win98下绝对是可以的,你是不是搞错了。
不好意思,是我弄错了,98下不行,因为我不在98下编程,刚才赶紧试了一下,果然不行,
我也再试一下别的方法。另外,你是如何给我发出对话框的?
 
good!98下不行----应该没问题
 
完了,看来是没有人能够解决这个问题了
 
1、大家得都不行,在98下,返回的刷新率是0呀
2、换个问法,如何在动态改变显示模式前保存当前的显示模式,包括的刷新率?
3、我的程序是用来播放DVD的,在全屏播放后,显示刷新频率会自动变成默认的频率
这是怎么回师。
4、另外有谁知道如何得到正在播放的AVI的100%的画面的长和宽啊。
 
增长知识
加油
 
今天又看了一下,不知微软搞了什么鬼,就是得不到dmDisplayFrequency的值,返回的都是0,
而且也不能更改其值.而其它的差不多都可以改,我试过dmBitsPerPel,dmPelsWidth,
dmPelsHeight等在WIN98下都可以成功更改.我想,恐怕在WIN98下的刷新率不是dmDisplayFrequency,
但我查看了DEVMODE中的所有值,也找不出其它哪个值是刷新率.看来不好解决了.
 
向诸位高手学习学习
 
看来这问题只有俺来解决了!!!呵!!!
 
这么多好心人都来救你啊
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
778
DelphiTeacher的专栏
D
D
回复
0
查看
818
DelphiTeacher的专栏
D
D
回复
0
查看
650
DelphiTeacher的专栏
D
后退
顶部