haijie1223 发表于 2011-1-7 10:01:29

命令行的每行内容如何出现在下拉菜单中【已解决】

本帖最后由 haijie1223 于 2011-1-8 08:58 编辑

假如说cmd运行如下命令
dir d:\
显示如下的话:
111
222
333
那么我如何才能实现以下图的功能,

就是说
假如说D盘还有其他文件和目录的话,他也会自动出现在下拉菜单中。

我现在只知道运行cmd命令是
Local $a
$a = Run(@ComSpec & " /c dir d:\", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)

制作下拉菜单是:
$combo1 = GUICtrlCreateCombo("", 86, 95, 193, 25)
GUICtrlSetData(-1,???,???)
若实现上述功能请问高手应该怎么写啊?

sxd 发表于 2011-1-7 10:22:59



#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 180, 222, 192, 124)
$Button1 = GUICtrlCreateButton("读取C盘", 8, 8, 75, 25)
$Button2 = GUICtrlCreateButton("读取D盘", 96, 8, 75, 25)
$Combo1 = GUICtrlCreateCombo("", 8, 48, 161, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        GUICtrlSetData($Combo1,"");清空上一次
                        $aFileList = _FileListToArray("c:\");读取列表
                        For $i = 1 To $aFileList
                                GUICtrlSetData($Combo1,$aFileList[$i]);把列表写入到combobox
                        Next
                Case $Button2
                        GUICtrlSetData($Combo1,"")
                        $aFileList = _FileListToArray("d:\")
                        For $i = 1 To $aFileList
                                GUICtrlSetData($Combo1,$aFileList[$i])
                        Next
        EndSwitch
WEnd

柔和de黑星 发表于 2011-1-7 11:06:32

看不懂 先收藏了

haijie1223 发表于 2011-1-7 11:17:41

回复 2# sxd


    楼上这位大侠,你的代码写的非常好,能很好的实现我要的功能。只是我需要的是这样,把回显值的每一行添加到列表中,举个例子,换个命令ping 127.0.0.1的话,其实
会显示
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
如果这样的话怎么添加到列表啊。
可能我举得例子的描述太有局限性,你那个函数是获取路径的,我是想把所有命令行的回显值的每一行显示在下拉列表中。

haijie1223 发表于 2011-1-7 11:19:45

回复 2# sxd


    是所有命令的回显值,并不一定是dir 命令,可能举得例子太典型了,有情大侠指点迷津啊。

sxd 发表于 2011-1-7 13:35:36

请搜索论坛 dos 回显

haijie1223 发表于 2011-1-7 15:14:12

回复 6# sxd


    dos 回显获取用msgbox我能显示出来,但是不能显示在下拉菜单中啊。唉。。。

sxd 发表于 2011-1-7 15:19:48

那看来你要梳理一下你的知识

数据 和 显示数据 的关系

haijie1223 发表于 2011-1-7 15:26:20

回复 8# sxd


    自己摸索进步很慢的   大侠直接把我欠缺的知识给我指点一下 好么

sxd 发表于 2011-1-7 15:29:53

你既然已经得到的数据 那现在要做的就是用GUICtrlSetData函数把数据显示到combobox里

haijie1223 发表于 2011-1-7 15:44:12

回复 10# sxd

这个问题真是麻烦我用guictrlsetdata显示到combobox的时候 他总是多行内容显示在一行里。而不是分行显示。所以我想用个数组显示,数组中每个数据显示一行,但是怎么把每一行的内容赋值到数组的每个数据中,没有研究成功。所以很是难办。总之是没有想到好的办法。

sxd 发表于 2011-1-7 16:18:59

guictrlsetdata一次就是一行
为什么多行显示在一行里 是因为你的数据本身就是多行在一行里

所以你需要对你的数据在guictrlsetdata之前 进行处理

kingfirekkk 发表于 2011-1-7 16:39:36

回复 12# sxd

兄弟基础扎实,果然厉害。。。!赞一个!小弟受益良多啊。

haijie1223 发表于 2011-1-7 16:46:20

回复 12# sxd


可是同样的数据 用msgbox显示的时候是和命令行显示的一模一样   是在多行里面的   为什么到了combo就不行了 呢    昨天研究了一晚上   一直没弄明白   函数翻了个遍   例子看了个遍   没找到合适的办法

sxd 发表于 2011-1-7 19:23:26

因为数据里包含了换行符吧你用StringSplit按照@CRLF来拆分下看看
页: [1] 2
查看完整版本: 命令行的每行内容如何出现在下拉菜单中【已解决】