yufei8051 发表于 2012-5-2 18:01:34

怎样取得列表框的文字呀?用Au3Info什么也不显示?(已解决)

本帖最后由 yufei8051 于 2012-5-4 15:40 编辑

如图,想取得下图中的股票代码 002659,怎么才能得到?明明里面有字呀,可使用Au3Info可见文本那里什么也没用呀?下面那个列表框是List2,已经搜索了好长时间了,还是没找到办法,请高手们指点一下。请给出源码,极端感谢先


.
感谢各位大大回复指点!
可是本人水平太次,还是不懂哦
把我的思路说清楚,看看怎么实现:就是当预警窗口弹出时,脚本文件就自动读出预警框第一列前6为数字的股票代码,并自动填入交易软件以在无值守的情况下完成自动交易,至于是买进还是卖出,则用预警框里第二列第一个字来判断(买或卖)。如下图:

.
.
我这里有一个闪电下单的脚本,想稍微改造下,下面是闪电下单的源码,是从一个股票论坛找到的,原作者是小小盘,谢谢原作者。相关部分代码如下。
我不需要那么复杂的功能,想全仓半仓选择都不需要,只要预警框弹出后直接把股票代码输入交易软件,然后用脚本文件模拟键盘鼠标一路回车确认就好。

Func RunButton($ButtonNumber)
      $BB = "网上股票交易系统5.0"
      Switch $ButtonNumber
                Case 1
                        $Text = ControlGetText("飞狐交易师 - ", "", 65281)
                        Sleep(100)
                        $dm = StringRight($Text, 6)
                        
                        If Not WinActive($BB, "") Then WinActivate($BB, "")
                        WinWaitActive($BB, "")
                        $size = WinGetPos($BB)

                        Sleep(30)
                        Send("{F1}")
                        Sleep(50)
                        ControlSetText($BB, "", 1032, $dm);输入代码
                        Sleep(400)
                        $kemailiang = ControlGetText($BB, "", 1018)
                        
                        If GUICtrlRead($Radio1) = 1 Then
                              $mailiang = Int($kemailiang / 400) * 100
                        EndIf
                        If GUICtrlRead($Radio2) = 1 Then
                              $mailiang = Int($kemailiang / 300) * 100
                        EndIf
                        If GUICtrlRead($Radio3) = 1 Then
                              $mailiang = Int($kemailiang / 200) * 100
                        EndIf
                        
                        If GUICtrlRead($Radio4) = 1 Then
                              $mailiang = Int($kemailiang / 100) * 100
                        EndIf

yufei8051 发表于 2012-5-2 18:04:36

这是下面那个控件的属性:

502762378 发表于 2012-5-2 20:31:29

外部listview本来可以用ControlListView,但是我一直没测试成功过,楼主你试试吧

happytc 发表于 2012-5-3 00:23:29

本帖最后由 happytc 于 2012-5-3 00:29 编辑

回复 1# yufei8051



#include <Array.au3>
#include <GuiListView.au3>


GetListText()
Func GetListText()
        Local $iFlag, $hWin, $hCtrl, $iCount = 0
       
        $iFlag = ShellExecuteWait("Explorer", @WindowsDir)
        Sleep(200)
        If Not $iFlag Then Return
        $hWin = WinGetHandle("")
        $hCtrl =ControlGetHandle($hWin, "", "SysListView321")
        $iCount =_GUICtrlListView_GetItemCount($hCtrl)
        If $iCount == 0 Then Return
        Local $aItems[$iCount]
        For $i = 0 To $iCount-1
                $aItems[$i] = _GUICtrlListView_GetItemText($hCtrl, $i)
        Next
        _ArrayDisplay($aItems)
EndFunc

502762378 发表于 2012-5-3 01:15:36

本帖最后由 502762378 于 2012-5-3 01:17 编辑

回复 4# happytc


    前辈,看了你代码问你个问题?
If Not $iFlag Then Return这个有必要吗?这边ShellExecuteWait("winmsd.exe")的退出代码永远是0。我注释掉了这句,我这边的测试才成功。
还有你这样用return和exit有区别吗?#include <Array.au3>
#include <GuiListView.au3>

GetListText()
Func GetListText()
      Local $iFlag, $hWin, $hCtrl, $iCount
      $iFlag = ShellExecuteWait("winmsd.exe")
      Sleep(2000)
                ;If Not $iFlag Then Return
      $hWin = WinGetHandle("")
      $hCtrl =ControlGetHandle($hWin, "", "SysListView321")
      $iCount =_GUICtrlListView_GetItemCount($hCtrl)
                ;MsgBox(1,"",$iCount)
      If $iCount == 0 Then Return
                Local $aItems[$iCount]
                For $i = 0 To $iCount-1
                $aItems[$i] = _GUICtrlListView_GetItemText($hCtrl, $i)
                Next
      _ArrayDisplay($aItems)
EndFunc

happytc 发表于 2012-5-3 01:37:10

回复 5# 502762378


    怎么可能永远是:退出代码永远是0?
我在Xp-sp3下测试的,成功运行后,返回的是1
当然还是用If @error Then Return更好点

“用return和exit有区别吗” 有点区别:Return是退出函数,exit则直接退出脚本了
当然在这里结果是一样的。对于在函数体内,用Exit制造出额外的脚本退出出口,不是很好的写作习惯!

502762378 发表于 2012-5-3 01:51:58

回复 6# happytc


    你的代码没问题,我是说我的测试执行winmsd的代码,不信你把我说的代码换成
If WinExists("") Then MsgBox(1,"",$iFlag)

happytc 发表于 2012-5-3 02:30:10

回复happytc


    你的代码没问题,我是说我的测试执行winmsd的代码,不信你把我说的代码换成
502762378 发表于 2012-5-3 01:51 http://www.autoitx.com/images/common/back.gif

我现在用的是精减系统,没有Winmsd.exe文件,网上下载个后一运行,又提示缺少别的,没法测了
不过,用If @error Then Return应该没有问题吧

lxz 发表于 2012-5-3 06:39:35

代码学习了.

魔导 发表于 2012-5-3 06:46:20

回复502762378


    怎么可能永远是:退出代码永远是0?
我在Xp-sp3下测试的,成功运行后,返回的是 ...
happytc 发表于 2012-5-3 01:37 http://www.autoitx.com/images/common/back.gif


    感谢   分享经验   小弟也一直在疑惑   这两个到底有什么不同的

ndyzx 发表于 2012-5-3 12:58:55

回复 4# happytc

谢谢,学习了。

kyniel 发表于 2012-5-3 13:41:42

回复 5# 502762378 第十四行不需要两个==

yufei8051 发表于 2012-5-3 15:23:39

回复yufei8051
happytc 发表于 2012-5-3 00:23 http://www.autoitx.com/images/common/back.gif


    感谢学长!可是还是看不懂哦

yufei8051 发表于 2012-5-3 15:49:52

#include <GuiListView.au3>





GetListText()

Func GetListText()

      Local $iFlag, $hWin, $hCtrl, $iCount = 0

      

      $iFlag = ShellExecuteWait("Explorer", @WindowsDir)

      Sleep(200)

      If Not $iFlag Then Return

      $hWin = WinGetHandle("")

      $hCtrl =ControlGetHandle($hWin, "", "SysListView321")

      $iCount =_GUICtrlListView_GetItemCount($hCtrl)

      If $iCount == 0 Then Return

      Local $aItems[$iCount]

      For $i = 0 To $iCount-1

                $aItems[$i] = _GUICtrlListView_GetItemText($hCtrl, $i)

      Next

      _ArrayDisplay($aItems)

EndFunc

学长上面的代码,怎么把股票代码显示出来呀?比如用msgbox函数,怎么才能显示股票代码?

happytc 发表于 2012-5-3 20:44:20

回复 14# yufei8051


    “学长上面的代码,怎么把股票代码显示出来呀?比如用msgbox函数,怎么才能显示股票代码?”

什么叫‘股票代码’?

若是一楼的你提的问题,你改改上面的代码,把你用的股票软件的句柄替换掉上面的

不就可以了。并且大家也不知道你用的什么股票软件。所以上面的代码是给你一个例子,你自己动手修改下就可以了
页: [1] 2
查看完整版本: 怎样取得列表框的文字呀?用Au3Info什么也不显示?(已解决)