标题:求教:如何实现vfp编程与通达信联动
只看楼主
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
结帖率:80%
已结贴  问题点数:20 回复次数:11 
求教:如何实现vfp编程与通达信联动
请教高手,如何实现vfp编程与通达信联动。比如vfp表单里面点击某股票自动打开通达信K线或分时线。请高手出招
搜索更多相关主题的帖子: 自动 联动 vfp 编程 打开 
2020-03-21 17:15
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 

没用过这软件
是不是这个东东
看了一下,还使用了MSAA,用IAccessible接口看了一下。
有兴趣可以试试拦截窗口消息看看,VFP截获其他应用程序不是强项。
但如果这软件是用消息机制的,又获得相关消息参数就好办,VFP直接发消息过去就有动作。
2020-03-21 19:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
原来真有那么一回事,跟随试一下

2020-03-21 23:33
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
得分:0 
先谢谢吹版主!能把你的的这个表单源码发来研究一下吗,谢谢
2020-03-21 23:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
软件本身已有的功能
好像多此一举
这种做法有什么特别用途?
2020-03-22 05:58
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
得分:0 
我是通过vfp把有关数据按照自己的模式进行分析然后得出目标股,然后进行实时联动查看
2020-03-22 09:48
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
得分:0 
相当于:后台进行数据分析(这个很关键,是按照自己确定的买卖模式完成,数据来自各个方面)——>实时查看走势——>决定操作。对于数据统计分析只会vfp,对接口知之甚少,谢谢指教
2020-03-22 09:51
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
得分:0 
这是我利用vfp编制的后台数据分析系统,现在就缺与股票软件联动
2020-03-22 09:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
股票玩得够劲的,赚不少了。
简单测试,参考上面贴图应该能看得明。
下面4个参数
第一个是窗口句柄,从上面列表选择通达信主窗口,不能选错。
第二个是窗口消息标志,默认是通达信的消息标志。
第三个是证券号,输入
第四个为0,忽略
** test.prg
DECLARE LONG GetWindow IN User32 LONG, LONG
DECLARE LONG GetWindowText IN User32 LONG, STRING@, LONG
DECLARE LONG GetClassName IN User32 LONG, STRING@, LONG
DECLARE LONG IsWindowVisible IN User32 LONG
DECLARE LONG RegisterWindowMessage IN User32 STRING@
DECLARE LONG PostMessage IN User32 LONG, LONG, LONG, LONG

UWM_STOCK = RegisterWindowMessage("Stock")

#DEFINE GW_HWNDNEXT  2
#DEFINE GW_CHILD     5

CREATE CURSOR DGrid1 (hWnd_WText C(50), WClass C(50), hWnd I)
of = CREATEOBJECT("Form1")
of.Show
READ EVENTS
CLOSE DATABASES ALL
CLEAR DLLS
RETURN

DEFINE CLASS Form1 As Form
    Height     = 250
    Width      = 800
    AutoCenter = .T.
    ShowWindow = 2
   
    ADD OBJECT Grid1 AS Grid WITH Top=10,Left=10,Height=190,Width=650,AllowCellSelection=.F.,RecordSource="DGrid1"
    ADD OBJECT Check1 AS CheckBox WITH Top=10,Left=680,Height=20,Width=100,Caption="可视的窗口",Value=1
    ADD OBJECT Check2 AS CheckBox WITH Top=32,Left=680,Height=20,Width=100,Caption="所有子窗口"
    ADD OBJECT Command1 AS Commandbutton WITH Top=60,Left=680,Height=32,Width=100,Caption="刷新窗口列表"
    ADD OBJECT label1 AS label WITH Top=210,Left=100,Width=500,FontSize=10,;
        Caption="hWnd           Msg           wParam           IParam"
    ADD OBJECT text1 AS textbox WITH Top=208,Left=130,Width=60,FontSize=10,value=0
    ADD OBJECT text2 AS textbox WITH Top=208,Left=228,Width=60,FontSize=10,value=UWM_STOCK
    ADD OBJECT text3 AS textbox WITH Top=208,Left=348,Width=60,FontSize=10,value="600000"
    ADD OBJECT text4 AS textbox WITH Top=208,Left=466,Width=60,FontSize=10,value=0
    ADD OBJECT Command2 AS Commandbutton WITH Top=208,Left=540,Height=22,Width=80,Caption="发送消息"
    PROCEDURE UnLoad
        CLEAR EVENTS
    ENDPROC
        
    PROCEDURE Init
        ZAP IN "DGrid1"
        _EnumWindows(_VFP.hWnd, (this.Check1.Value==1), (this.Check2.Value==1), 0, 0)
        GO TOP IN "DGrid1"
        this.Grid1.SetFocus
    ENDPROC
   
    PROCEDURE Grid1.Click
        thisform.text1.value = DGrid1.hWnd
    ENDPROC
   
    PROCEDURE Check1.InteractiveChange
        thisform.Init
    ENDPROC

    PROCEDURE Check2.InteractiveChange
        thisform.Init
    ENDPROC
   
    PROCEDURE Command1.Click
        thisform.Init
    ENDPROC
   
    PROCEDURE Command2.Click
          code = ALLTRIM(thisform.text3.value) && 证号
          code = IIF(LEFT(code,1)=="6","7","6") + code &&上证号前加“7”,其他前加“6”
          PostMessage(thisform.text1.value,thisform.text2.value,VAL(code),thisform.text4.value)
    ENDPROC
ENDDEFINE

    ** 枚举窗口
FUNCTION _EnumWindows(dhWnd, blIsVisible, blIsChild, ddCmd, ddLay)
    LOCAL cText, cClass
    cText  = SPACE(256)
    cClass = SPACE(256)
    dhWnd = GetWindow(dhWnd, ddCmd)
    DO WHILE (dhWnd != 0)
        IF !blIsVisible OR (blIsVisible AND (IsWindowVisible(dhWnd) == 1))
            GetWindowText(dhWnd, @cText, LEN(cText))
            GetClassName(dhWnd, @cClass , Len(cClass))
            INSERT INTO DGrid1 VALUES (SPACE(ddLay*2)+TRANSFORM(dhWnd)+" "+ cText, cClass, dhWnd)
            IF blIsChild
                _EnumWindows(dhWnd, blIsVisible, blIsChild, GW_CHILD, ddLay + 1)
            ENDIF
        ENDIF
        dhWnd = GetWindow(dhWnd, GW_HWNDNEXT)
    ENDDO
ENDFUNC
2020-03-22 10:54
lxlsf
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2014-10-10
得分:0 
非常感谢!我先研究学习
2020-03-22 11:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500486-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.465297 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved