autoit改变分辨率函数,在X P系统可以正常调用(任何系统支持的分辨率),在WIN7系统不能调最大分辨率。 35

下面是调整分辨率函数,在XP系统调用改变分辨率正常,在WIN7系统其他分辨率正常,就是在调用改变到最大分辩率是不能实现,来个高手帮看看。Func_ChangeScreen... 下面是调整分辨率函数,在X P系统调用改变分辨率正常,在WIN7系统其他分辨率正常,就是在调用改变到最大分辩率是不能实现,来个高手帮看看。
Func _ChangeScreenRes($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
Local Const $DM_PELSWIDTH = 0x00080000
Local Const $DM_PELSHEIGHT = 0x00100000
Local Const $DM_BITSPERPEL = 0x00040000
Local Const $DM_DISPLAYFREQUENCY = 0x00400000
Local Const $CDS_TEST = 0x00000002
Local Const $CDS_UPDATEREGISTRY = 0x00000001
Local Const $DISP_CHANGE_RESTART = 1
Local Const $DISP_CHANGE_SUCCESSFUL = 0
Local Const $HWND_BROADCAST = 0xffff
Local Const $WM_DISPLAYCHANGE = 0x007E
If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
If @error Then
$B = 0
SetError(1)
Return $B
Else
$B = $B[0]
EndIf
If $B <> 0 Then
DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData($DEVMODE, 4, $i_Width, 2)
DllStructSetData($DEVMODE, 4, $i_Height, 3)
DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
DllStructSetData($DEVMODE, 4, $i_RefreshRate, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B[0]
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
SetError(1)
Return $B
EndSelect
EndIf
EndFunc ;==>_ChangeScreenRes
展开
 我来答
百度网友fcb6d01f07
2012-11-21 · TA获得超过216个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:277万
展开全部
回答autoit问题的就这几个人?是因为我一般不看这个分类吧……
你的程序没有任何问题,故障涉及到的是Windows系统开发,也就是说……
这是一个已知的系统BUG,官方的建议是用WDK函数:SetDisplayConfig。

参考资料: http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/ee8aaacf-e682-46c6-82f1-9617ed187691

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
百度网友5311d79
2012-11-17 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3113万
展开全部
你要说清楚你是64位的系统...
你编译的时候在编译选项里选择了X64版本吗?(右键,带选项编译,选择X64版本)

亲,在百度知道,回答autoit问题的就这几个人....
上面试过还是不能解决的话,建议你还是去autoit中文论坛去提问吧(要注册)
更多追问追答
追问
Win7 64或32位都不行啊。
追答
脚本开头加上 #requireadmin
运行可执行文件的时候通过右键菜单选择“以管理员权限运行”
除了权限问题外,Win7 32位跟Win XP 是没啥区别的,XP运行没任何问题。
64位跟32位肯定差别不小。

参考资料: http://zhidao.baidu.com/question/496852153.html?oldq=1#answer-1246379813

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式