新版通达信持仓获取方式,得启动通达信,点击资金股份,再按热键F9,脚本如下,运行环境请去ahk英文官网下载 Current Version。
; Tested with AHK v1.1.31.00 Unicode 32/64-bit on Windows XP/7/10
/*
------------------------------------------------------
Filename: 获取通达信持仓.ahk
Description: 在通达信持仓界面,按 F9 可以获取持仓数据,本脚本仅做演示用,如有定制需求,请与作者联系。
Version: 2020年2月29日
Created By: YuKuan.Liu
Author Weixin: sunwind1576157
Type: AutoHotkey
URL: https://blog.csdn.net/liuyukuan/article/details/49722207
------------------------------------------------------
TODO:
+ 切换树状菜单到资金股份.
------------------------------------------------------
*/
CoordMode,Mouse,Window
F9::
PostMessage,0x111,14023,0,SysListView321,ahk_class TdxW_MainFrame_Class ;输出持仓数据
;等待输出设置窗口
loop
{
Sleep,50
if A_Index >100
Reload
}until WinExist("输出")
;~ WinWait, 输出, , 3
loop
{
Sleep,100
ControlGet, isEnable, Enabled,,Edit1,输出
ControlClick,x60 y60,输出
ControlClick,Button1,输出
if A_Index >100
Reload
}until (isEnable=1)
;获取输出路径
ControlGetText,file,Edit1,输出
;~ ControlSend,,{Enter},输出
ControlSend,,{Enter},输出
filename:=GetFilename(File)
;关闭弹出的文件窗口
loop
{
Sleep,50
if A_Index >100
Reload
}until WinExist(filename)
;~ WinWait, %filename%, , 3
WinClose,% filename
;解析持仓数据
fileparse(File)
return
;~ SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]
GetFilename(txt)
{
;~ SplitPath, txt, o ;OutFileName
SplitPath, txt, ,,,o ;OutNameNoExt
return o
}
fileparse(file)
{
FileRead,oFile, %file%
FileContents:=StrReplace(oFile," ","`t")
mark:=0
Loop,parse,FileContents, `n, `r
{
;~ FileDelete,%file%
LineNumber := A_Index
;;-------- 读取人民币:余额、可用、可取、股票市值、基金市值、资产、盈亏--------
if (InStr(A_LoopField,"人民币")=1)
{
Loop, parse, A_LoopField,%A_Tab%,%A_Space%
{
if(A_LoopField<>"")
str.=A_LoopField . "`n"
}
MsgBox %str%
}
;~ Loop, parse, A_LoopField,`t,`=
;-------- 跳过 美 元、港 元、以及--------
else if (InStr(A_LoopField,"美")=1 or InStr(A_LoopField,"港")=1 or InStr(A_LoopField,"-")=1)
{
mark:=LineNumber
;记录 --------在哪一行
continue
}
;-------- 跳过空行--------
else if (LineNumber=mark+1)
{
continue
}
;-------- 读取表头--------
else if (LineNumber=mark+2)
{
Loop, parse, A_LoopField,%A_Tab%,%A_Space%
{
if(A_LoopField<>"")
head.=A_LoopField . "`n"
}
MsgBox 表头是↓`n%head%
}
;-------- 读取数据--------
else{
this_line:=""
if (A_LoopField="")
break
Loop, parse, A_LoopField,%A_Tab%,%A_Space%
{
if(A_LoopField<>"")
this_line.=A_LoopField . "`n"
}
MsgBox % LineNumber-mark-2 "is↓`n" this_line
}
}
}
测试结果如下:
2020年2月29日 以下方法因交易软件做了权限限制,已无法获取。此法可以获取普通程序的SysListView321中的内容,但无法获取交易软件客户端里的持仓内容。
#Persistent
DetectHiddenWindows, on
;获取招商证券持仓数量,需要先登录到交易软件,并浏览过一次持仓情况后才可自动获取。
Gui, Add, ListView, r20 w800,股票名称|证券数量|可卖数量|成本价|浮动盈亏|盈亏比例(`%)|最新市值|当前价|今买数量|今卖数量|证券代码|股东代码
Gui, Show,, 持仓信息
SetTimer, 获取持仓,1000
获取持仓:
;注意1、最后一个参数不要忽略
;注意2、SysListView321这个控件ID需要自己用spy软件先获取,可能随着运行次数不同会变
ControlGet, tdxlist, List, 0, SysListView321, ahk_class TdxW_MainFrame_Class, List1
LV_delete()
Loop, Parse, tdxlist,`n
LV_Add("", StrSplit(A_LoopField,A_Tab)*)
Return
GuiClose:
GuiEscape:
ExitApp