AU3新旧版本 语法问题请教
1.新版本 Local$aArray旧版本 V3.3.8版 无法接受 这个写法 要怎么改 才能 让旧版接受?
2. 新版本 下面的语法 For $i = 0 To UBound($aMax) - 1
$tData = DllStructCreate("wchar", DllStructGetData($AppInfoData, $aMax[$i] + 2))
$sData = DllStructGetData($tData, 1)
If $aMax[$i] = 13 Then $sData = StringMid($sData, 7, 2) & "/" & StringMid($sData, 5, 2) & "/" & StringMid($sData, 1, 4)
$aArray[$iF - 1][$i] = ($sData = "0") ? "" : $sData
DllStructSetData($tData, 1, "")
Next
是改成 IF $aArray[$iF - 1][$i] = ($sData = "0") THEN
$sData=""
Else
$sData=$sData
EndIf
還是 改成
IF $aArray[$iF - 1][$i] = ($sData = "0") THEN
$aArray[$iF - 1][$i]=""
Else
$aArray[$iF - 1][$i]=$sData
EndIf
本帖最后由 afan 于 2018-8-17 11:14 编辑
是不支持三目语法
下面的写法还是要改一下…… afan 发表于 2018-8-17 10:55
是不支持三目语法
下面的写法是对的
A simple example of listing installed applications using ObjCreateInterface.
官方網站 的 例子我需要這個 含函數列出 所有軟體但是我想使用舊版的 V3.3.8版的但是 函數 新寫法 不支援
老大 是否可以幫忙改一下我好從這裏面 去理解我剛剛問題的 差異性
;Danyfirex 06/09/2014
#include <Array.au3>
Opt("MustDeclareVars", 1)
Global Const $sTagAppInfoData = "UINT cbSize;UINT dwMask;ptr pszDisplayName;ptr pszVersion;ptr pszPublisher;ptr pszProductID;" & _
"ptr pszRegisteredOwner;ptr pszRegisteredCompany;ptr pszLanguage;ptr pszSupportUrl;ptr pszSupportTelephone;" & _
"ptr pszHelpLink;ptr pszInstallLocation;ptr pszInstallSource;ptr pszInstallDate;ptr pszContact;ptr pszComments;" & _
"ptr pszImage;ptr pszReadmeUrl;ptr pszUpdateInfoUrl"
Global Const $sCLSID_EnumInstalledApps = "{0B124F8F-91F0-11D1-B8B5-006008059382}"
Global Const $sIID_IEnumInstalledApps = "{1BC752E1-9046-11D1-B8B3-006008059382}"
Global Const $sTagIEnumInstalledApps = "Next hresult(ptr*);Reset hresult();"
Global Const $sIID_IShellApp = "{A3E14960-935F-11D1-B8B8-006008059382}"
Global Const $sShellApp = "GetAppInfoData hresult(ptr);"
Global Const $AIM_DISPLAYNAME = 0x00000001
Global Const $AIM_VERSION = 0x00000002
Global Const $AIM_PUBLISHER = 0x00000004
Global Const $AIM_PRODUCTID = 0x00000008
Global Const $AIM_REGISTEREDOWNER = 0x00000010
Global Const $AIM_REGISTEREDCOMPANY = 0x00000020
Global Const $AIM_LANGUAGE = 0x00000040
Global Const $AIM_SUPPORTURL = 0x00000080
Global Const $AIM_SUPPORTTELEPHONE = 0x00000100
Global Const $AIM_HELPLINK = 0x00000200
Global Const $AIM_INSTALLLOCATION = 0x00000400
Global Const $AIM_INSTALLSOURCE = 0x00000800
Global Const $AIM_INSTALLDATE = 0x00001000
Global Const $AIM_CONTACT = 0x00004000
Global Const $AIM_COMMENTS = 0x00008000
Global Const $AIM_IMAGE = 0x00020000
Global Const $AIM_READMEURL = 0x00040000
Global Const $AIM_UPDATEINFOURL = 0x00080000
Local $aArray = GetInstalledApps(BitOR($AIM_DISPLAYNAME, $AIM_INSTALLDATE))
_ArrayDisplay($aArray, "GetInstalledApps", Default, Default, Default, "NAME|INSTALLDATE")
$aArray = GetInstalledApps(BitOR($AIM_DISPLAYNAME, $AIM_UPDATEINFOURL))
_ArrayDisplay($aArray, "GetInstalledApps", Default, Default, Default, "DISPLAYNAME|UPDATEINFOURL")
$aArray = GetInstalledApps(BitOR($AIM_DISPLAYNAME, $AIM_INSTALLDATE, $AIM_INSTALLLOCATION))
_ArrayDisplay($aArray, "GetInstalledApps", Default, Default, Default, "DISPLAYNAME|INSTALLLOCATION|INSTALLDATE")
Func GetInstalledApps($iMask = $AIM_DISPLAYNAME)
Local $oEnumInstalledApps = ObjCreateInterface($sCLSID_EnumInstalledApps, $sIID_IEnumInstalledApps, $sTagIEnumInstalledApps)
If @error Then Return 0
Local $pShellApp = 0
Local $oShellApp = 0
Local $AppInfoData = DllStructCreate($sTagAppInfoData)
Local $pAppInfoData = DllStructGetPtr($AppInfoData)
Local $i = 0
Local $aArray
Local $iF = 1
Local $tData = 0
Local $sData = ""
Local $aMax = nCol($iMask)
While $oEnumInstalledApps.Next($pShellApp) = 0 And $pShellApp <> 0
$oShellApp = ObjCreateInterface($pShellApp, $sIID_IShellApp, $sShellApp)
If @error Then Return 0
DllStructSetData($AppInfoData, "cbSize", DllStructGetSize($AppInfoData))
DllStructSetData($AppInfoData, "dwMask", $iMask)
$oShellApp.GetAppInfoData($pAppInfoData)
ReDim $aArray[$iF]
For $i = 0 To UBound($aMax) - 1
$tData = DllStructCreate("wchar", DllStructGetData($AppInfoData, $aMax[$i] + 2))
$sData = DllStructGetData($tData, 1)
If $aMax[$i] = 13 Then $sData = StringMid($sData, 7, 2) & "/" & StringMid($sData, 5, 2) & "/" & StringMid($sData, 1, 4)
$aArray[$iF - 1][$i] = ($sData = "0") ? "" : $sData
DllStructSetData($tData, 1, "")
Next
$oShellApp = Null
$iF += 1
WEnd
$oEnumInstalledApps = Null
Return $aArray
EndFunc ;==>GetInstalledApps
Func nCol($iMask)
Local $aFlag = [$AIM_DISPLAYNAME, $AIM_VERSION, $AIM_PUBLISHER, $AIM_PRODUCTID, $AIM_REGISTEREDOWNER, $AIM_REGISTEREDCOMPANY, _
$AIM_LANGUAGE, $AIM_SUPPORTURL, $AIM_SUPPORTTELEPHONE, $AIM_HELPLINK, $AIM_INSTALLLOCATION, $AIM_INSTALLSOURCE, _
$AIM_INSTALLDATE, $AIM_CONTACT, $AIM_COMMENTS, $AIM_IMAGE, $AIM_READMEURL, $AIM_UPDATEINFOURL]
Local $iCol = 0
Local $x = 0
Local $aCol
For $i = 0 To UBound($aFlag) - 1
If BitAND($iMask, $aFlag[$i]) Then
$aCol[$x] = $i + 1
$x += 1
EndIf
Next
ReDim $aCol[$x]
Return $aCol
EndFunc ;==>nCol
If $sData = "0" Then
$aArray[$iF - 1][$i] = ""
Else
$aArray[$iF - 1][$i] = $sData
EndIf afan 发表于 2018-8-17 11:04
這樣改 過不了我 使用新版使用我剛剛舊版的語法 抓不到資料 換成新版語法就可以抓到資料.....
kk_lee69 发表于 2018-8-17 11:10
這樣改 過不了我 使用新版使用我剛剛舊版的語法 抓不到資料 換成新版語法就可以抓到資料.....
那就不是语法问题了,可能是 ObjCreateInterface 这个实验性函数引起的,我这运行报错 本帖最后由 kk_lee69 于 2018-8-17 11:22 编辑
afan 发表于 2018-8-17 11:12
那就不是语法问题了,可能是 ObjCreateInterface 这个实验性函数引起的,我这运行报错
找到了$tData=""或者 $tData=$sData
這樣就可以了感謝 幫忙 另外請問
第一個問題新版的 Local$aArray
意義是指是個 數組 但是 沒有任何 一筆資料只是定義是個二組數組嗎??
那舊版的要怎麼定義
kk_lee69 发表于 2018-8-17 11:20
找到了$tData=""或者 $tData=$sData
這樣就可以了感謝 幫忙 另外請問
我没用新版,我是3.3.14.2。新版支持这种写法应该是你理解的,是数组,也定义了维度,只是没填充任何数据 afan 发表于 2018-8-17 11:26
我没用新版,我是3.3.14.2。新版支持这种写法应该是你理解的,是数组,也定义了维度,只是没填充任何数据
恩剛剛上面應該是我搞錯了 我在測試看看 呵呵 kk_lee69 发表于 2018-8-17 11:35
恩剛剛上面應該是我搞錯了 我在測試看看 呵呵
你可以试试改成
Local $aArray
Local $iF = 1
Local $tData = 0
Local $sData = ""
Local $aMax = nCol($iMask)
While $oEnumInstalledApps.Next($pShellApp) = 0 And $pShellApp <> 0
$oShellApp = ObjCreateInterface($pShellApp, $sIID_IShellApp, $sShellApp)
If @error Then Return 0
DllStructSetData($AppInfoData, "cbSize", DllStructGetSize($AppInfoData))
DllStructSetData($AppInfoData, "dwMask", $iMask)
$oShellApp.GetAppInfoData($pAppInfoData)
If $iF > 0 And UBound($aMax) > 1 Then
ReDim $aArray[$iF]
For $i = 0 To UBound($aMax) - 1
$tData = DllStructCreate("wchar", DllStructGetData($AppInfoData, $aMax[$i] + 2))
$sData = DllStructGetData($tData, 1)
If $aMax[$i] = 13 Then $sData = StringMid($sData, 7, 2) & "/" & StringMid($sData, 5, 2) & "/" & StringMid($sData, 1, 4)
If $sData = "0" Then
$aArray[$iF - 1][$i] = ""
Else
$aArray[$iF - 1][$i] = $sData
EndIf
DllStructSetData($tData, 1, "")
Next
EndIf
$oShellApp = Null
$iF += 1
WEnd 我在旧版本 V3.3.8.1版(支持Win2000版)试过是不支持Local $aArray 写法,我只能Local $aArray,完后再调整数组维度。 kk_lee69 发表于 2018-8-17 11:35
恩剛剛上面應該是我搞錯了 我在測試看看 呵呵
我在
>"D:\AutoIt3394\SciTe\ACNWrapper\ACNWrapper.exe" /run /ErrorStdOut /in "D:\AU3调试\kk_lee69\AU3新旧版本 语法问题.au3" /autoit3dir "D:\AutoIt3394" /UserParams
+>13:03:01 开始执行 ACNWrapper v.1.0.3.1测试结果
chzj589 发表于 2018-8-17 13:06
我在
>"D:\AutoIt3394\SciTe\ACNWrapper\ACNWrapper.exe" /run /ErrorStdOut /in "D:\AU3调试\kk_lee69\ ...
找出來了
第一個問題 使用 Local$aArray
就可以
第二個問題 改成 下面就可以
IF $sData = "0" THEN
$aArray[$iF - 1][$i]=""
Else
$aArray[$iF - 1][$i]=$sData
EndIf
kk_lee69 发表于 2018-8-17 13:14
找出來了
第一個問題 使用 Local$aArray
把版本与大小容量抓出来就好玩了
chzj589 发表于 2018-8-17 15:47
把版本与大小容量抓出来就好玩了
可以抓出版本 廠商
大小沒辦法
页:
[1]
2