假死问题,麻烦测试下,是脚本问题还是,版本问题,_ArrayDisplay无法显示
本帖最后由 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 - 1], $TEMP_SOFTTYPE_ARRAY
For $i = 1 To $SoftType
GUICtrlCreateListViewItem($SoftType[$i], $ListView2)
$SoftVar = IniReadSection(@ScriptDir & "\soft.ini", $SoftType[$i])
If @error Then ContinueLoop
ReDim $TEMP_SOFTTYPE_ARRAY[$SoftVar]
For $ii = 1 To $SoftVar
GUICtrlCreateListViewItem($SoftVar[$ii], $ListView1)
$TEMP_SOFTTYPE_ARRAY[$ii - 1] = $SoftVar[$ii]
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)
MsgBox(0, $iIndex, IsArray($SoftTypeIndex[$iIndex]))
EndIf
EndSwitch
$tNMTV = 0
EndFunc ;==>WM_NOTIFY [办公软件]
OFFICE=abc.exe
[影音工具]
[聊天软件]
QQ=qq.exe
[杀毒软件]soft.ini $SoftTypeIndex[$i - 1] = $TEMP_SOFTTYPE_ARRAY
?可以这样吗? 任意数组都无法显示 显示就假死 不知道是为什么 之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。
LZ可以试试,在 WM_NOTIFY 函数中即便是添加 MsgBox 同意会假死。
如果是为了输出结果做测试用,可以用 ConsoleWrite 试试! = =#原来这个是BUG么!
好吧!谢谢水木子 回复 6# heavenm
我觉得这应该不属于BUG吧! 谢谢分享 收藏了 请参考_ArrayDisplay帮助文档
_ArrayDisplay(这里是数组的名称), 而$SoftTypeIndex并非数组 之前我也遇到过这样的问题,我发现是 $WM_NOTIFY 的问题,不知道这样说是否准确。
LZ可以试试,在 WM_NO ...
水木子 发表于 2014-4-29 09:15 http://www.autoitx.com/images/common/back.gif
同意,不过msgbox是可以使用的 本帖最后由 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 ;==>_ArrayDisplay2,不修改_ArrayDisplay(),注册一个 Adlib 函数,延迟显示数组 今天刚好遇到,Sleep(10) ;###############添加这句,问题解决完美解决
页:
[1]