新版通达信持仓获取方式,得启动通达信,点击资金股份,再按热键F9,脚本如下,运行环境请去ahk英文官网下载 Current Version。
; Tested with AHK v1.1.31.00 Unicode 32/64-bit on Windows XP/7/10
/*------------------------------------------------------Filename: 获取通达信持仓.ahkDescription: 在通达信持仓界面,按 F9 可以获取持仓数据,本脚本仅做演示用,如有定制需求,请与作者联系。Version: 2020年2月29日Created By: YuKuan.LiuAuthor Weixin: sunwind1576157Type: AutoHotkeyURL: https://blog.csdn.net/liuyukuan/article/details/49722207------------------------------------------------------TODO:+ 切换树状菜单到资金股份.------------------------------------------------------
*/
CoordMode,Mouse,WindowF9::
PostMessage,0x111,14023,0,SysListView321,ahk_class TdxW_MainFrame_Class ;输出持仓数据
;等待输出设置窗口
loop
{Sleep,50if A_Index >100Reload
}until WinExist("输出")
;~ WinWait, 输出, , 3loop
{Sleep,100ControlGet, isEnable, Enabled,,Edit1,输出ControlClick,x60 y60,输出ControlClick,Button1,输出if A_Index >100Reload
}until (isEnable=1);获取输出路径
ControlGetText,file,Edit1,输出
;~ ControlSend,,{Enter},输出
ControlSend,,{Enter},输出filename:=GetFilename(File);关闭弹出的文件窗口
loop
{Sleep,50if A_Index >100Reload
}until WinExist(filename)
;~ WinWait, %filename%, , 3
WinClose,% filename;解析持仓数据
fileparse(File)
return;~ SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]
GetFilename(txt)
{;~ SplitPath, txt, o ;OutFileNameSplitPath, txt, ,,,o ;OutNameNoExtreturn o
}
fileparse(file)
{FileRead,oFile, %file%FileContents:=StrReplace(oFile," ","`t")mark:=0Loop,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="")breakLoop, 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, List1LV_delete()Loop, Parse, tdxlist,`nLV_Add("", StrSplit(A_LoopField,A_Tab)*)
ReturnGuiClose:
GuiEscape:ExitApp
几行代码就可以获取持仓,招商证券、中银国际通达信上测试可用