找回密码
 加入
搜索
查看: 4066|回复: 5

[系统综合] [已解决]autoit 默认语言是什么 发现个奇怪的问题

  [复制链接]
发表于 2010-4-16 10:03:03 | 显示全部楼层 |阅读模式
本帖最后由 lainline 于 2010-4-16 10:14 编辑

返回值是韩国字  囧
DllOpen("oleacc.dll")

Local $s=_Acc_GetStateText(1)
MsgBox(0,"",$s)

Func _Acc_GetStateText($dwStateBit,$cchStateBitMax=128);返回状态位对应的解释
        Local $lpszStateBit=DllStructCreate("WCHAR["&$cchStateBitMax&"]")
        $plpszStateBit = DllStructGetPtr($lpszStateBit)
        Local  $aResult= DllCall("oleacc.dll","UINT","GetStateText","DWORD",$dwStateBit,"ptr",$plpszStateBit,"UINT",$cchStateBitMax)
        If @error Then Return SetError(1,0,0)
        Return DllStructGetData($lpszStateBit,1)
EndFunc

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-16 10:12:20 | 显示全部楼层
嘿嘿。确实哦 又意思
 楼主| 发表于 2010-4-16 10:13:36 | 显示全部楼层
找到原因了

DllOpen("oleacc.dll")

Local $s=_Acc_GetStateText(1)
MsgBox(0,"",$s)

Func _Acc_GetStateText($dwStateBit,$cchStateBitMax=128);返回状态位对应的解释
        Local $lpszStateBit=DllStructCreate("WCHAR["&$cchStateBitMax&"]")
        $plpszStateBit = DllStructGetPtr($lpszStateBit)
        Local  $aResult= DllCall("oleacc.dll","UINT","GetStateTextW","DWORD",$dwStateBit,"ptr",$plpszStateBit,"UINT",$cchStateBitMax);改成GetStateTextW
        If @error Then Return SetError(1,0,0)
        Return DllStructGetData($lpszStateBit,1)
EndFunc
发表于 2010-4-16 16:54:31 | 显示全部楼层
啥原因啊?
发表于 2010-4-16 19:43:00 | 显示全部楼层
注意UNICODE与ANSI版本兼容问题,如果某个系统函数中用到了字符串指针,一般这个函数都会有FunctionA和FunctionW两个原型,上例中除了可以把GetStateText改成GetStateTextW外,还可以把wchar改成char,同样可以解决问题。
很多关于中文显示不全或者乱码的问题都是与此有关,而很多人却误认为这是AutoIt的BUG,这果真是一件无聊至极的事情。
发表于 2010-4-17 08:46:48 | 显示全部楼层
厉害呀看看
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-22 20:52 , Processed in 0.079073 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表