找回密码
 加入
搜索
查看: 6910|回复: 16

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

  [复制链接]
发表于 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,???,???)
若实现上述功能请问高手应该怎么写啊?

本帖子中包含更多资源

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

×
发表于 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[0]
                                GUICtrlSetData($Combo1,$aFileList[$i]);把列表写入到combobox
                        Next
                Case $Button2
                        GUICtrlSetData($Combo1,"")
                        $aFileList = _FileListToArray("d:\")
                        For $i = 1 To $aFileList[0]
                                GUICtrlSetData($Combo1,$aFileList[$i])
                        Next
        EndSwitch
WEnd
发表于 2011-1-7 11:06:32 | 显示全部楼层
看不懂 先收藏了
 楼主| 发表于 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
如果这样的话怎么添加到列表啊。
可能我举得例子的描述太有局限性,你那个函数是获取路径的,我是想把所有命令行的回显值的每一行显示在下拉列表中。
 楼主| 发表于 2011-1-7 11:19:45 | 显示全部楼层
回复 2# sxd


    是所有命令的回显值,并不一定是dir 命令,可能举得例子太典型了,有情大侠指点迷津啊。
发表于 2011-1-7 13:35:36 | 显示全部楼层
请搜索论坛 dos 回显
 楼主| 发表于 2011-1-7 15:14:12 | 显示全部楼层
回复 6# sxd


    dos 回显获取用msgbox我能显示出来,但是不能显示在下拉菜单中啊。唉。。。
发表于 2011-1-7 15:19:48 | 显示全部楼层
那看来你要梳理一下你的知识

数据 和 显示数据 的关系
 楼主| 发表于 2011-1-7 15:26:20 | 显示全部楼层
回复 8# sxd


    自己摸索进步很慢的   大侠直接把我欠缺的知识给我指点一下 好么
发表于 2011-1-7 15:29:53 | 显示全部楼层
你既然已经得到的数据 那现在要做的就是用GUICtrlSetData函数把数据显示到combobox里
 楼主| 发表于 2011-1-7 15:44:12 | 显示全部楼层
回复 10# sxd

这个问题  真是麻烦  我用guictrlsetdata显示到combobox的时候 他总是多行内容显示在一行里。而不是分行显示。所以我想用个数组显示,数组中每个数据显示一行,但是怎么把每一行的内容赋值到数组的每个数据中,没有研究成功。所以很是难办。总之是没有想到好的办法。
发表于 2011-1-7 16:18:59 | 显示全部楼层
guictrlsetdata一次就是一行
为什么多行显示在一行里 是因为你的数据本身就是多行在一行里

所以你需要对你的数据在guictrlsetdata之前 进行处理
发表于 2011-1-7 16:39:36 | 显示全部楼层
回复 12# sxd

兄弟基础扎实,果然厉害。。。!赞一个!小弟受益良多啊。
 楼主| 发表于 2011-1-7 16:46:20 | 显示全部楼层
回复 12# sxd


  可是同样的数据 用msgbox显示的时候  是和命令行显示的一模一样   是在多行里面的   为什么到了combo就不行了 呢    昨天研究了一晚上   一直没弄明白   函数翻了个遍   例子看了个遍   没找到合适的办法
发表于 2011-1-7 19:23:26 | 显示全部楼层
因为数据里包含了换行符吧  你用StringSplit按照@CRLF来拆分下看看
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-1 23:34 , Processed in 0.122290 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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