DDE Daten empfangen
- EgonEprom
- Beiträge: 24
- Registriert: 15.02.2010 18:18
- Computerausstattung: Windows2000-XP-Vista-7
- Wohnort: Saarwellingen
DDE Daten empfangen
Kleine Hilfestellung nötig! (habe weder in der Hilfe noch hier im Board etwas dazu finden können):
Ich habe ein Programm (unter Win2000) laufen, das per DDE-Schnittstelle (Dynamic Data Exchange) Daten zur Verfügung stellt. In Excel kann ich die Daten sehen, aber diese dort auszuwerten scheint mir unmöglich. Daher wollte ich es mit PureBasic versuchen.
Aber wie komme ich da an die Daten ran?
Danke vorab & mfg Egon Eprom
Ich habe ein Programm (unter Win2000) laufen, das per DDE-Schnittstelle (Dynamic Data Exchange) Daten zur Verfügung stellt. In Excel kann ich die Daten sehen, aber diese dort auszuwerten scheint mir unmöglich. Daher wollte ich es mit PureBasic versuchen.
Aber wie komme ich da an die Daten ran?
Danke vorab & mfg Egon Eprom
Re: DDE Daten empfangen
DDE ist zwar schon eine wenig Out. Aber wird teilweise immer noch verwendet.
Habe bei mir mal gesucht und folgendes von Rings gefunden.
Der Code enthält DDE-Server und Client. Zum testen einfach zwei mal starten...
Habe bei mir mal gesucht und folgendes von Rings gefunden.
Der Code enthält DDE-Server und Client. Zum testen einfach zwei mal starten...
Code: Alles auswählen
;DDE Server and Client in PureBasic
;(c)2002 by S.Rings (-CodeGuru-)
;
;Compile as exe and start twice or more
;PureBasic 4.10 or better needed!
Global WhoIAM.s
Global DDEServerName.s
DDEServerName = "TestServer"
Global DDETopicName.s
DDETopicName = "PUREBASIC_DDE_TOPIC"
Global idInst.l
Global isRun.l
#XCLASS_BOOL = $1000
#XCLASS_NOTIFICATION = $8000
#XTYPF_NOBLOCK = $2
#XTYP_CONNECT = $60 | #XCLASS_BOOL | #XTYPF_NOBLOCK
#XTYP_DISCONNECT = $C0 | #XCLASS_NOTIFICATION | #XTYPF_NOBLOCK
#CP_WINANSI = 1004 ;' Default codepage For windows & old DDE convs.
#SW_RESTORE = 9
#DDE_FACK = $8000
#XCLASS_FLAGS = $4000
#XTYP_EXECUTE = $50 | #XCLASS_FLAGS
#DNS_REGISTER = $1
#DNS_UNREGISTER = $2
#CF_TEXT = 1
#XTYP_POKE = $90 | #XCLASS_FLAGS
Procedure.s MySpace(Count.l)
Dummy.s="":For I=1 To Count: Dummy.s=Dummy.s + " ":Next I:ProcedureReturn Dummy
EndProcedure
Procedure.l DDECallback(uType,uFmt, hConv , hszTopic, hszItem, hData,dwData1, dwData2)
Shared DDETopicName
Shared DDEServerName
Shared idInst
Shared WHOIAM
ReturnValue=0;#DDE_FACK
Select uType
Case #XTYP_CONNECT
iCount = DdeQueryString_(idInst, hszTopic, 0, 0, #CP_WINANSI);First Count Length of String
Buffers.s = MySpace(iCount)
DdeQueryString_( idInst, hszTopic, Buffers, iCount + 1, #CP_WINANSI)
If Buffers = DDETopicName
StartDrawing(WindowOutput(0))
DrawText (10,10,Str(uFmt) +"..the client successfully connected..")
StopDrawing()
ReturnValue = #DDE_FACK
EndIf
Case #XTYP_DISCONNECT
StartDrawing(WindowOutput(0))
DrawText (10,70,"disconnected..")
StopDrawing()
ReturnValue = #DDE_FACK
Case #XTYP_EXECUTE
ReturnValue=0
Case #XTYP_POKE
iCount = DdeQueryString_(idInst, hszTopic, 0, 0, #CP_WINANSI);First Count Length of String
Buffers.s = MySpace(iCount)
DdeQueryString_( idInst, hszTopic, Buffers, iCount + 1, #CP_WINANSI)
dummy.s= "Topic:" + Buffers
StartDrawing(WindowOutput(0))
DrawText (10,30,dummy)
StopDrawing()
iCount = DdeQueryString_(idInst, hszItem, 0, 0, #CP_WINANSI);First Count Length of String
Buffers.s = MySpace(iCount)
DdeQueryString_( idInst, hszItem, Buffers, iCount + 1, #CP_WINANSI)
dummy=" Data::" + Buffers
ReturnValue = #DDE_FACK
StartDrawing(WindowOutput(0))
DrawText (10,50,dummy)
StopDrawing()
EndSelect
ProcedureReturn ReturnValue
EndProcedure
;-Attention Callbacks are only working with Procedure for >3.1
MyCallBackAdress=@DDECallback();
If DdeInitialize_(@idInst, MyCallbackAdress, 0, 0)
MessageRequester("Info","Failed:"+Str(idInst),0)
EndIf
hszServer = DdeCreateStringHandle_(idInst, DDEServerName, #CP_WINANSI)
If hszServer<>0
hszTopic = DdeCreateStringHandle_(idInst, DDETopicName, #CP_WINANSI)
If hszTopic<>0
;try To find the first instance, connect
hconvServer = DdeConnect_(idInst, hszServer, hszTopic, 0)
If hconvServer
WhoIam="Client"
MessageRequester( WHOIAM,"Server already started...",0)
Else
WHOIAM="Server":MessageRequester (WHOIAM,"attempt To start Server",0)
Result=DdeNameService_( idInst, hszServer, 0,#DNS_REGISTER)
If result=1
isRun=1
EndIf
MessageRequester(WHOIAM,"Server started:"+Str(Result),0)
EndIf
EndIf
EndIf
If OpenWindow(0, 200, 200, 300, 200, WHOIAM, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If WhoIam="Client"
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 72, 20, "Send")
EndIf
EndIf
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
If EventID = #PB_Event_Gadget
Select EventType()
Case 0
Message.s="-CodeGuru- was there"
hItemMessage = DdeCreateStringHandle_(idInst, Message, #CP_WINANSI )
If hItemMessage = 0
MessageRequester (WHOIAM,"Failed",0)
EndIf
myresult=0
Result = DdeClientTransaction_(Message, Len(Message), hconvServer, hItemMessage, #CF_TEXT, #XTYP_POKE, 3000, @myresult )
MessageRequester(WHOIAM,"Transaction:" +Str(Result)+":"+Str(myresult),0)
If Result <>0
DdeFreeDataHandle_(Result )
EndIf
Result=DdeFreeStringHandle_( idInst, hItemMessage)
EndSelect
EndIf
Until Quit = 1
EndIf
Result=DdeFreeStringHandle_( idInst, hszServer)
Result=DdeFreeStringHandle_( idInst, hszTopic)
;only unregister the DDE server For first instance
If isRun
Result=DdeNameService_(idInst, hszServer, 0, #DNS_UNREGISTER)
MessageRequester( WHOIAM,"in ServiceUnRegister:"+Str(result), 0)
EndIf
Result=DdeUninitialize_( idInst)
MessageRequester(WHOIAM,"Ending:"+Str(Result),0)
End
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- EgonEprom
- Beiträge: 24
- Registriert: 15.02.2010 18:18
- Computerausstattung: Windows2000-XP-Vista-7
- Wohnort: Saarwellingen
Re: DDE Daten empfangen
Erst mal Danke für diesen prompten Service.
und was heißt hier "ein wenig Out"? gilt das für Windows 2000 noch nicht ?
Auf jeden Fall kann ich heute abend wohl noch einiges zu basteln, bis ich meine Daten sehe :)
und was heißt hier "ein wenig Out"? gilt das für Windows 2000 noch nicht ?
Auf jeden Fall kann ich heute abend wohl noch einiges zu basteln, bis ich meine Daten sehe :)
Re: DDE Daten empfangen
Hallo,
aus Interesse, was für Daten hast du damit vor auszuwerten ?
Gruß Andreas
aus Interesse, was für Daten hast du damit vor auszuwerten ?
Gruß Andreas
- EgonEprom
- Beiträge: 24
- Registriert: 15.02.2010 18:18
- Computerausstattung: Windows2000-XP-Vista-7
- Wohnort: Saarwellingen
Re: DDE Daten empfangen
Realtime Börsendaten 

Re: DDE Daten empfangen
Zwar nicht 100% realtime aber sowas würde man doch heute über eine normale API lösen ? ( XML ... )
Und diese halt dann mit den Netzwerk Befehlen auswerten, sowas finde ich persönlich konformer
Und diese halt dann mit den Netzwerk Befehlen auswerten, sowas finde ich persönlich konformer

- EgonEprom
- Beiträge: 24
- Registriert: 15.02.2010 18:18
- Computerausstattung: Windows2000-XP-Vista-7
- Wohnort: Saarwellingen
Re: DDE Daten empfangen
Wie real-Time die Daten sind, weiß ich nicht. Aber man kann gut damit arbeiten und sie kosten nichts, ich nur irgendwie mit dem DDE-Server leben, von dem sie kommen. Ansonsten sei noch zu erwähnen, daß ich von Windows-Programmierung eigentlich gar keine Ahnung habe !?!
Re: DDE Daten empfangen
Ich meinte den Realtime abgleich, ich weiß nicht genau wie DDE Server funktionieren, deswegen das mit dem realtime.
Bei der ( angesprochen ) API Methode müsste man dann natürlich alle paar Minuten kontrollieren ob es neue Daten gibt, das meinte ich mit realtime.
Bei der ( angesprochen ) API Methode müsste man dann natürlich alle paar Minuten kontrollieren ob es neue Daten gibt, das meinte ich mit realtime.
- EgonEprom
- Beiträge: 24
- Registriert: 15.02.2010 18:18
- Computerausstattung: Windows2000-XP-Vista-7
- Wohnort: Saarwellingen
Re: DDE Daten empfangen
Zur Realtime-Frage: Minuten sind da jenseits von gut & böse: Im Excel sehe ich mitunter 4 bis 4 update der Daten pro Sekunde; wie stark der zeitliche Versatz von "Quell-Fenster" zum Excel ist, kann ich nicht mit hinreichender Genauigkeit bestimmen, daß diese Aussage sinn macht. Für manuellen Betrieb eben sauschnell.
Re: DDE Daten empfangen
Wenn du gute Rechner und schnelle Computer zu Auswertung hast und die Börsen API auch schnell ist sollte man auch hier mehrene Updates per Sekunde hinkriegen.
Hier ein Link zu dieser API der DB
http://deutsche-boerse.com/dbag/dispatc ... Values_API
Warscheinlich gut kommentiert das ganze, trotzdem scheint es relativ komplex zu sein
Denke eher dass das hier das richtige sein sollte.
http://deutsche-boerse.com/dbag/dispatc ... ons/51_CEF
Hier ein Link zu dieser API der DB
http://deutsche-boerse.com/dbag/dispatc ... Values_API
Warscheinlich gut kommentiert das ganze, trotzdem scheint es relativ komplex zu sein

Denke eher dass das hier das richtige sein sollte.
http://deutsche-boerse.com/dbag/dispatc ... ons/51_CEF