找回密码
 加入
搜索
查看: 7539|回复: 11

[AU3基础] 假死问题,麻烦测试下,是脚本问题还是,版本问题,_ArrayDisplay无法显示

  [复制链接]
发表于 2014-4-28 11:24:57 | 显示全部楼层 |阅读模式
本帖最后由 heavenm 于 2014-4-28 11:28 编辑
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiToolbar.au3>
#include <ImageListConstants.au3>
#include <ListViewConstants.au3>
#include <ToolbarConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=f:\软件管家\软件管家.kxf
$Form1_1 = GUICreate("Form1", 816, 573, 191, 112)

$ListView1 = GUICtrlCreateListView("软件名称|版本|备注", 200, 40, 609, 465, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 270)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 70)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, -2)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

$ListView2 = GUICtrlCreateListView("全部软件", 0, 40, 194, 465)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, -2)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("批量安装", 688, 512, 115, 33, -1, $WS_EX_CLIENTEDGE)

;-----------------------------------------------------------------------
#include <GuiListView.au3>
#include <array.au3>
_GUICtrlListView_JustifyColumn($ListView2, 0, 2)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

;-----------------------------------------------------------------------
GUISetState(@SW_SHOW)




$SoftType = IniReadSectionNames(@ScriptDir & "\soft.ini")
Dim $SoftTypeIndex[$SoftType[0] - 1], $TEMP_SOFTTYPE_ARRAY[1]
For $i = 1 To $SoftType[0]
        GUICtrlCreateListViewItem($SoftType[$i], $ListView2)
        $SoftVar = IniReadSection(@ScriptDir & "\soft.ini", $SoftType[$i])
        If @error Then ContinueLoop
        ReDim $TEMP_SOFTTYPE_ARRAY[$SoftVar[0][0]]
        For $ii = 1 To $SoftVar[0][0]
                GUICtrlCreateListViewItem($SoftVar[$ii][0], $ListView1)
                $TEMP_SOFTTYPE_ARRAY[$ii - 1] = $SoftVar[$ii][0]
        Next
        $SoftTypeIndex[$i - 1] = $TEMP_SOFTTYPE_ARRAY
Next


#endregion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

EndSwitch
WEnd




Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        $tNMTV = DllStructCreate($tagNMTVDISPINFO, $ilParam)
        $iCode = DllStructGetData($tNMTV, "Code")
        $iIndex = _GUICtrlListView_GetSelectedIndices($ListView2)
        Switch $iCode
                Case $NM_CLICK
                        If ($iIndex) Then
                                                                _ArrayDisplay($SoftTypeIndex[0])
                                                                 MsgBox(0, $iIndex, IsArray($SoftTypeIndex[$iIndex]))
                        EndIf
        EndSwitch
        $tNMTV = 0
EndFunc   ;==>WM_NOTIFY

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2014-4-28 11:25:29 | 显示全部楼层
[办公软件]
OFFICE=abc.exe
[影音工具]
[聊天软件]
QQ=qq.exe
[杀毒软件]
soft.ini
发表于 2014-4-28 12:19:19 | 显示全部楼层
$SoftTypeIndex[$i - 1] = $TEMP_SOFTTYPE_ARRAY
?可以这样吗?
 楼主| 发表于 2014-4-28 17:23:50 | 显示全部楼层
任意数组都无法显示 显示就假死 不知道是为什么
发表于 2014-4-29 09:15:02 | 显示全部楼层
之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。

LZ可以试试,在 WM_NOTIFY 函数中即便是添加 MsgBox 同意会假死。

如果是为了输出结果做测试用,可以用 ConsoleWrite 试试!
 楼主| 发表于 2014-4-29 10:40:56 | 显示全部楼层
= =#原来这个是BUG么!
好吧!谢谢水木子
发表于 2014-4-29 11:54:44 | 显示全部楼层
回复 6# heavenm

我觉得这应该不属于BUG吧!
发表于 2014-5-4 10:15:05 | 显示全部楼层
谢谢分享 收藏了
发表于 2014-5-4 15:52:19 | 显示全部楼层
请参考_ArrayDisplay帮助文档
_ArrayDisplay(这里是数组的名称), 而$SoftTypeIndex[0]并非数组
发表于 2014-5-4 22:55:56 | 显示全部楼层
之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。

LZ可以试试,在 WM_NO ...
水木子 发表于 2014-4-29 09:15



    同意,不过msgbox是可以使用的
发表于 2014-5-6 02:47:10 | 显示全部楼层
本帖最后由 athland5013 于 2014-5-6 03:00 编辑

感觉跟WM_NOTIFY是有关的,以前的版本没有这个问题,不知道什么时候更新了就出现这个情况

我的解决办法

1,修改_ArrayDisplay()
                        Case $cExit_Script
                                ; Clear up
                                GUIDelete($hGUI)
                                Exit
                EndSwitch
                Sleep(10)         ;###############添加这句,问题解决        
        WEnd

        ; Clear up
        GUIDelete($hGUI)
        Opt("GUIOnEventMode", $iOnEventMode) ; Reset original GUI mode
        Opt("GUIDataSeparatorChar", $sCurr_Separator) ; Reset original separator

        Return 1

EndFunc   ;==>_ArrayDisplay
2,不修改_ArrayDisplay(),注册一个 Adlib 函数,延迟显示数组
发表于 2020-12-4 14:29:46 | 显示全部楼层
今天刚好遇到,  Sleep(10)         ;###############添加这句,问题解决  完美解决
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 02:17 , Processed in 0.180443 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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