2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【AHK】给通达信软件增加F1买入 F2卖出 交易热键(基于中银国际客户端测试)

【AHK】给通达信软件增加F1买入 F2卖出 交易热键(基于中银国际客户端测试)

时间:2022-06-30 16:09:11

相关推荐

【AHK】给通达信软件增加F1买入 F2卖出 交易热键(基于中银国际客户端测试)

通达信金融终端网上交易软件 快捷键分为四种

数字键:比如1,61,81,10,91等

点系列键:比如.101,.201,.301.... .909等

功能键:比如F1,F2... 空格键,减号键,TAB等 (F1:分时成交明细、F2:分价表、F3:沪指分时、F4:深指分时、F5分时与K线切换、F6:自选股、F7:树状菜单、 F8:无、F9:期权交易、F10:基本资料、 F11:投资日历、F12:委托)

组合键:比如Ctrl+V,Alt+1,Ctrl+Z等

交易软件都做得差强人意。。。同花顺有热键F1呼出买入和F2卖出的功能(见下图),通达信则没有(是有数字热键221,223 总之是别扭)

来为通达信普通买入卖出功能增加热键!(程序化交易的先得能呼叫出买卖功能然后自动填单)

(有钱的可以直接购买fix协议或者dll接口,没钱的用ahk模拟人来操作吧,穷得蛋疼。。。)

【技术原理】

MSAA的全称是Microsoft Active Accessibility。这是类似DCOM技术。 技术模型是这样的,UI程序可以暴露出一个Interface,方便另一个程序对其进行控制。 MSAA技术的初衷是为了方便残疾人使用Windows 程序。自动化自然可以借用这项技术。

[源代码]

;功能:给通达信软件增加类似同花顺的交易功能热键;10月25日11:39:03;作者:sunwind#SingleInstance,ForceDetectHiddenWindows,OnWINNAME := "TdxW_MainFrame_Class"CTRLNAME := "MHPToolBar1"hwnd:=ControlGetHwnd(CTRLNAME, WINNAME)idObject:=0;~ window :=0 SELF;~ client := -4 ;~ child_1 := 1;;~ child_2 := 2;;~ child_3 := 3;;========MHPToolBar1========;按钮所在的“小”窗口window := Acc_ObjectFromWindow(hwnd, idObject) ;========MainViewBar========;窗口里面的工具栏MainViewBar:= Acc_Children(window)[3];下面代码是基于中银国际交易软件客户端测试的;========买入按钮========buy:= Acc_Children(MainViewBar)[1];~ MsgBox % Acc_Role(buy) " :: " buy.accName(0);========卖出按钮========sell:= Acc_Children(MainViewBar)[2];========撤单按钮========cancel:= Acc_Children(MainViewBar)[3];========成交按钮========chengjiao:= Acc_Children(MainViewBar)[4];========持仓按钮========chicang:= Acc_Children(MainViewBar)[5];招商证券的;========买入按钮========;buy:= Acc_Children(MainViewBar)[12];========卖出按钮========;sell:= Acc_Children(MainViewBar)[13];这些信息查询,需要用到AccViewer工具。;========热键定义========;F1买入,F2卖出,F3撤单,F4持仓查询f1:: buy.accDoDefaultAction(0)returnf2::sell.accDoDefaultAction(0)returnf3::cancel.accDoDefaultAction(0)returnf4::chicang.accDoDefaultAction(0)return;========辅助函数========ControlGetHwnd(aCtrl, aWin){ControlGet, cID,hwnd, , %aCtrl%, ahk_class %aWin%Return cID};========acc库函数========; Written by jethrowAcc_Init(){StatichIf Nothh:=DllCall("LoadLibrary","Str","oleacc","Ptr")}Acc_Query(Acc) { ; thanks Lexikos - /forum/viewtopic.php?t=81731&p=509530#509530try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)}Acc_Error(p="") {static setting:=0return p=""?setting:setting:=p}Acc_ObjectFromWindow(hWnd, idObject = 0){Acc_Init()IfDllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0ReturnComObjEnwrap(9,pacc,1)}Acc_Children(Acc) {if ComObjType(Acc,"Name") != "IAccessible"ErrorLevel := "Invalid IAccessible Object"else {Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]if DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {Loop %cChildren%i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child):return Children.MaxIndex()?Children:} elseErrorLevel := "AccessibleChildren DllCall Failed"}if Acc_Error()throw Exception(ErrorLevel,-1)}Acc_Role(Acc, ChildId=0) {try return ComObjType(Acc,"Name")="IAccessible"?Acc_GetRoleText(Acc.accRole(ChildId)):"invalid object"}Acc_GetRoleText(nRole){nSize := DllCall("oleacc\GetRoleText", "Uint", nRole, "Ptr", 0, "Uint", 0)VarSetCapacity(sRole, (A_IsUnicode?2:1)*nSize)DllCall("oleacc\GetRoleText", "Uint", nRole, "str", sRole, "Uint", nSize+1)ReturnsRole}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。