主题:  关于“改变屏幕刷新率”一帖的一点疑问

阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#12002/8/23 13:44:54
引用:

给你转篇文章,来自AW爱好者论坛的schzh
分辨率设置的详细介绍
因为不能要求用户保持跟我们一样的分辨率,这就会导致我们的画面或者不能全部显示,或者只能在屏幕上占一小块,只有保持始终全屏才是最美观的。方法有二:
1、设为全屏,然后动态更改每一个显示为屏幕大小,这样烦琐而且耗时,导致程序运行慢;
2、在程序起始记录分辨率,更改用户分辨率为设定值,程序结束自动恢复原设置,这种方法我认为最可行。

方法2大部分问题前面已讨论过,还需要解决以下问题:
1、分辨率的四个参数中,screenwidth,screenheight,screendepth为 Authorware变量,直接记录即可,但刷新频率没有,而且1024x768x32x85被更改为800x600x32时刷新频率被更改为60Hz,必须要改回,若用函数强行设为85,一是与原来不符,二是有些显示器根本达不到,可能就失败了;
2、初始时如果用户分辨率不能达到要求设置,则设置失败,应该给用户一个交代:“你的显示器太老了,没法用,画面不能全部显示或颜色特别难看不要赖我哦!花钱换个吧!”,对不对?
3、必须拦截Alt+F4,否则最后的恢复程序不能执行,不能恢复用户界面,人家会说:“水平太。。。。。。”

解决问题可以用BUDKEY,老张的函数,但都要钱,所以我选用alTools2.0, 完全免费。

我的解决方案如下:
1、用alGetDispSet()检测该机器可能否设置为你的要求(必要时可降低色位和频率),若不能,则提示。。。。。。;
2、起始记录width=screenwidth,height=screenheight,depth=screendepth,至于刷新频率则用alGetCurrentDispSet(),如结果为"1024x768x32x85",则记录frequent=85,字符串的解析大家都会吧;

(刚才有问字符串解析的事,不好意思,我原以为大家都知道的,因为我第一天就先学的这个,现在看来还有必要说说:

result1 := alGetCurrentDispSet() ;获得当前设置
number1 := Rfind("x", result1) ;找到最后一个x
number2 := CharCount(result1) ;字符串长度
frequent := SubStr(result1,number1+1,number2) ;获得分辨率,最后一个x直至结尾)

3、用alChangeRes(宽,高,色,频率) 设置屏幕为你的值;
4、用alHideTaskBar()隐藏任务栏;
5、用InstallAPWKeys()拦截Alt+F4,InstallAPWKeys为ApwKeys.u32的函数;
6、主程序;
7、alChangeRes(width,height,depth,frequent)恢复分辨率;
8、RemoveAPWKeys()恢复Alt键功能;
9、alShowTaskBar()显示任务栏;





有没有什么函数能列出显示器刷新率的列表,这样动态设置屏幕的刷新率启不更好。

上贴的漏洞在于,如果客户机当前的刷新率是80(在800X600下,刷新率最高为80),记录在案后,开始自己的“3、用alChangeRes(宽,高,色,频率) 设置屏幕为你的值;” 这是我要是设置为85,而客户机不支持也是做无用功阿,这段程序的意义就不存在了

所以能不能列出系统个分辨率下的刷新制?

编辑历史:[这消息被冷血编辑过(编辑时间2002-08-23 13:45:56)]


阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#22002/8/23 14:31:58
找到方法了,老张函数里面有
名称 M_GetAllDisplayModes()
格式 Result:=M_GetAllDisplayModes()
功能 列出系统支持的所有可用的屏幕分辨率。
返回值 分辨率列表。格式为:"Width*Height,ColorDepth,Refresh",换行符号分隔。
参数 无。
范例 M_GetAllDisplayModes.zip
注意 -

编辑历史:[这消息被冷血编辑过(编辑时间2002-08-23 14:32:20)]


魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#32002/8/23 14:48:39
altools.u32 的2.0 版本可以取得屏幕分辨率啊。。老张的函数要钱的啊。。呵呵



阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#42002/8/23 15:08:56
没办法,我已经掏腰包了,老张里面的很多函数确实不错~

上面那个函数还可以列出不同分辨率下的Refresh(刷新率),这样就周全多了

altools 2。0版哪里有下载? 我手头的里面没有那个取得当前刷新率的函数,Rock给弄一个把~ 谢谢了~



阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#52002/8/23 16:18:45
ApwKeys.u32 支持32位的系统吗? 也就是说在2000里面能用吗?



阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#62002/8/23 16:22:49
刚才试错了,2000里面能用

他都能拦截哪些系统健? 那个函数里面连个说明也没有~



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
#72002/8/24 17:09:55
win键,Alt+F4,Alt+Tab,CTRL+ALT+DEL



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#82002/8/24 19:12:38

编辑历史:[这消息被Rock编辑过(编辑时间2002-08-24 19:14:05)]


阿州

职务:普通成员
等级:2
金币:10.0
发贴:447
#92002/8/25 11:23:27
Y在上个帖子中说
引用:
win键,Alt+F4,Alt+Tab,CTRL+ALT+DEL


根据前面的帖子,
引用:

apwkeys中的外部函数说明(小邓)转自http://dengchunzhi.home.chinaren.com/u32.htm
该U32使AW可以识别Windows的一些特殊键,如Alt,Ctrl等。

InstallAPWKeys

语法:InstallAPWKeys()

说明:使用了InstallAPWKeys()这个函数之后,就可以在AW应用程序中控制这些键,具体如下:

Alt------"AltF16"

Shift-----"ShiftF16"

Ctrl-------"CtrlF16"

Caps Lock------"F15"

Num Lock-------"F14"

Scorll Lock------"F13"

RemoveAPWKeys

语法:RemoveAPWKeys()

说明:使用了InstallAPWKeys()这个函数之后,必须使用RemoveAPWKeys()函数将按键还原。





他的意思就是说改变了上述按键的原始定义,赋予了他新的含义,那么原来的系统组合健也因为这些案件定义的修改而失效,对不?

(谢谢Rock的2.0!)

编辑历史:[这消息被冷血编辑过(编辑时间2002-08-25 11:24:23)]


与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
#102002/8/25 16:35:01
是这样。



没有注册

职务:普通成员
等级:1
金币:0.0
发贴:10
#112002/9/11 1:04:54
用上面的方法如果程序运行过程中死机,强行退出本程序,其结果是要用手工将计算机的分辨率还原,不知道是不是这样??



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#122002/9/11 3:42:01
没有注册在上个帖子中说
引用:
用上面的方法如果程序运行过程中死机,强行退出本程序,其结果是要用手工将计算机的分辨率还原,不知道是不是这样??


是这样的。。