精华内容
下载资源
问答
  • 有关动态数据交换DDE、注册表和文件关联的片语只言(转载) 一、动态数据交换(Dynamic Data Exchange,简称DDE) DDE协议定义了一组消息及其使用规则,借助共享内存机制,通过应用程序窗口之间的消息交换...

    有关动态数据交换DDE、注册表和文件关联的片语只言(转载)

    一、动态数据交换(Dynamic Data Exchange,简称DDE)

    • DDE协议定义了一组消息及其使用规则,借助共享内存机制,通过应用程序窗口之间的消息交换间接实现了应用程序间的数据交换。
    • 客户端(Client)、服务器(Server)和会话(Conversation)
      参与DDE消息交换的两个应用程序构成了一个DDE会话的两个主体,会话发起方称作客户端,会话响应方称作服务器;一个应用程序可以同时参与多个DDE会话,它在每个会话中所扮演的角色不受任何限制,既可以是服务器也可以是客户端。
      DDE会话发生在两个窗口之间,这两个窗口分别隶属于参与会话的两个应用程序;窗口既可以是应用程序的主窗口,也可以是MDI类应用程序的某个文档的窗口,还可以是专门用来处理DDE消息的隐藏性窗口。
      DDE会话由参与会话的两个窗口的句柄组成的句柄对标识, 无论何时两个窗口之间只能存在一个DDE会话。
    • 应用(Application)、主题(Topic)和数据项(Item)
      DDE协议采用三级层次结构来标识被交换的数据单元,按照从高到低的顺序这三层分别是应用、主题和数据项。应用名,也被称作服务名,通常情况下人们就使用 扮演服务器角色的应用程序的名称作为应用(服务)名;而主题名通常表示待交换数据的一个总体类属,是一种逻辑分组名称;而数据项名就具体指出了某个数据单 元的确切含义和用途;需要注意的是应用名、主题名和数据项名都是用来标识数据的逻辑名称,使用什么样的名字完全取决于服务端应用程序的具体实现,而和 DDE协议本身没有任何关系。
      一般来讲,一个扮演服务器角色的应用程序只提供一个应用/服务名,而按照数据的用途和类型的不同,往往会提供多个主题名,而每个主题名下又会包含多个数据 项;两个应用程序间要建立DDE会话,客户端往往需要提供应用名和主题名,应用名指出了会话的目标程序,主题名则决定了在该会话中可以交换的数据项的范 围,应用名和主题名在会话初始由双方协商确定,并且在该会话存续期间不可改变,如果你想交换一个不属于当前主题的数据项,对不起,你必须用新主题重新建立 一个新会话。
    • DDE协议比较老旧,微软也不再鼓励使用,如果没有DDE服务程序的开发经验的话,有些概念理解起来确实不太容易,为了理解上的方便,不妨把DDE架构与互联网架构作一个简单的类比,虽不严格,却也颇为神似:


    • 总体来说,DDE协议是一款设计精巧的、轻量级的进程间通讯协议,之所以被微软打入冷宫,原因可能有以下三点:
      1.网络延展性不好。由于实现机制本身的限制,DDE协议对于跨系统的进程间通信的支持不是很理想,虽然也有了Network DDE,但其本质是通过代理来实现的;
      2.设计精巧,非常节省资源,导致Intel颇多抱怨;
      3.工作顺利,不喜欢崩溃,不符合微软的风格和口味。
      因此,虽然不再受宠,但是如果你正在寻找一种系统内的进程间通讯机制的话,DDE还是很值得考虑一下的。
    • 参考:http://msdn.microsoft.com/en-us/library/ms674583(VS.85).aspx

    二、注册表(Registry)

    • 键名(Key Name)由除反斜线\之外的可打印ASCII字符组成,而值名(Value Name)则不受此限制,可以使用各种语言的各种字符;键名不区分大小写。
    • 注册表保存在蜂巢文件(Hive Files)中,而蜂巢文件在文件系统中的位置和名称可以从注册表的下列子键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist中取得。
    • Value Data中所包含的字符串类型数据(REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ)既可能是Unicode字符串,也可能是ANSI字符串。注意,ANSI字符串可不仅仅是指英文字符串,ANSI收录了几乎 所有的主流编码方案(称作代码页),当然也包括简体中文的GBK编码方案(CP936),因此GBK字符串也属于ANSI字符串。
    • HKEY_CLASSES_ROOT(HKCR)是HKEY_LOCAL_MACHINE\Software\Classes (针对本机所有用户)和HKEY_CURRENT_USER\Software\Classes (针对特定的交互式用户)的合并视图,合并的原则是用户设置优先,使用的原则是尽量用于读取、读取尽量使用,如果要进行写入操作的话,最好明确指明HKEY_LOCAL_MACHINE\Software\Classes或 HKEY_CURRENT_USER\Software\Classes路径。使用HKEY_CLASSES_ROOT进行读取操作,一方面为应用软件提 供了在老旧的操作系统上的兼容性,另一方面也简化了在新系统上获取用户个性化设置的流程,可谓一举两得。
    • 参考:http://msdn.microsoft.com/en-us/library/ms724871(VS.85).aspx

    三、文件关联(File Associations)

    • 参数扩展变量%0-%9及%*在批处理文件和注册表中的含义略有不同。
      批处理文件:
      %0代表要执行的命令(也就是批处理文件)本身
      %1-%9代表对应的命令行参数
      %*代表所有命令行参数,注意不包括命令本身%0
      注册表中定义shell动作时:
      %1代表你要启动的文件(比如用鼠标双击的文件)
      %2-%9代表对应的后续的参数(比如双击了带有参数的快捷方式)
      %*代表所有的后续参数,注意不包括你要启动的文件本身%1
      %0在作为参数出现时与%1同意,作为命令出现时其含义未定义
    • 间接字符串(Indirect String)
      格式:@[Path\]Filename,-ResourceID
      含义:从[Path\]Filename指定的模块中抽取串资源ID为ResourceID的字符串
      样例:@%SystemRoot%\notepad.exe,-469,就是指从notepad.exe中抽取串资源ID为469的字符串,我的系统上该串就是"Text Document"。
    • 缺省动作
      文件关联为每种文件类型都提供了一个缺省动作,也就是指当用户双击该类型文件时系统应该采取的动作,该动作在ProgID的Shell键的Default值中被指明,如果该值为空,对大多数文件类型来讲,缺省动作常常就是Open动作。

    • Shell处理动作(Verb)的方式有三种,按照优先级从高到低的顺序排列如下:
      1.使用COM和IDropTarget,通过定义DropTarget键实现;
      2.使用动态数据交换DDE,通过定义ddeexec键实现;
      3.使用命令行调用,通过定义command键实现;
      如果一个动作(Verb)同时提供了三种实现方式,那么Shell会首先尝试优先级高的方式,只有高优先级方式失败,才会依次选择次优先级的方式。
      出于使用方面的考虑,下面仅对如何实现DDE方式做一些详细的解释:
      首先,在verb下创建子键ddeexec,并将DDE命令字符串填入其Default值中。所谓命令字符串实际上就是需要通过 WM_DDE_EXECUTE消息发送给服务器程序并要求其执行的单个或多个命令组成的字符串,具体所支持的命令集及其格式完全取决于服务器程序的具体实 现,常见格式及语法可参考下面的连接。
      其次,为了对DDE会话进行更好的控制,可以在ddeexec键下创建以下可选子键:
      Application子键: 其缺省值应设置为DDE会话的应用/服务名,如果该子键不存在或者其缺省值为空,那么就使用verb\command的缺省值作为该会话的应用/服务名;
      Topic子键:其缺省值应设置为DDE会话的主题名,如果该子键不存在或者其缺省值为空,那么就使用System作为该会话的主题名;
      ifexec子键:其Default值中填入的也是DDE命令字符串,其含义与ddeexec缺省值中包含的命令字符串完全相同,只是使用场合不同。正常情况下,如果首次会话发起请求就成功建立会话的话,那么ddeexec的缺省命令字符串被使用,如果首次会话失败(通常是由于扮演服务器角色的应用程序尚未启动),则verb/command的缺省值所指向的应用程序将被启动,这时如果ifexec的缺省值不为空的话,则该命令字符串将被发往服务器程序,如果ifexec的缺省值为空或者该键根本就不存在的话,则发往服务器程序的仍将是ddeexec的缺省值所包含的命令字符串。
    • 扩展建新文件(New)子菜单
      为了在建新文件(New)子菜单中添加对某一文件类型的支持,需要找到以该类型文件的扩展名命名的注册表键(如.txt),添加ShellNew子键,并为ShellNew子键添加一个或多个如下值项(Value),以指明新文件的创建方法:
      Command REG_SZ      指定一个新文件向导程序;
      Data REG_BINARY      新文件预包含的数据;
      FileName REG_SZ       新文件的复制蓝本,忽略Data值;
      NullFile       建空文件,忽略Data值和FileName值;
      样例:
      [HKEY_CLASSES_ROOT\.txt\ShellNew]
      "NullFile"=""
    • 文件关联的另一种途径:
      除了通过在HKEY_CLASSES_ROOT中为文件扩展名设置ProgID的方法外,还可以通过在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer \FileExts中为文件扩展名设置Application的方式实现文件类型及其处理程序的关联,为了方便我们把后者简称为Application关 联方式,把前者称为ProgID关联方式。虽然对用户来说二者的作用差不多,但实际上它们之间还是有些区别的: Application关联方式是对用户使用习惯的一种记录,是根据用户在Explorer中打开Open With对话框时所作的选择而自动调整相应设置的(当然也可通过修改注册表的方法进行手工调整),是用户相关的,也就是说对每个用户来说其 Application关联方式的设置都可能是不同的;另外,Application关联方式的优先级更高一些,同样的设置项目,起作用的应该是在 Application关联方式中设定的值。
    • 参考:http://msdn.microsoft.com/en-us/library/cc147473(VS.85).aspx
      http://msdn.microsoft.com/en-us/library/cc144101(VS.85).aspx#new
      http://msdn.microsoft.com/en-us/library/ms997515.aspx

      (本文来自:http://hi.baidu.com/smileinsilence/blog/item/9b05d14aeecba42909f7efc7.html

    展开全文
  • LabVIEW动态数据交换DDE

    千次阅读 2013-08-01 00:03:00
    用于在Windows平台上的两个应用程序之间动态交换数据,是进程间通信的一种方法。Labview的DDE调用由DDE Vis实现,位置在vi.lib\Platform\dde.llb,可通过工具-高级-编辑选板实现   创建DDE server的步骤: 1. ...

    用于在Windows平台上的两个应用程序之间动态交换数据,是进程间通信的一种方法。Labview的DDE调用由DDE Vis实现,位置在vi.lib\Platform\dde.llb,可通过工具-高级-编辑选板实现

     

    创建DDE server的步骤:

    1.    利用DDE Srv Register Service.Vi 创建或注册一个DDE服务和一个DDE主题

    2.    利用DDE Srv Register Item.vi 创建一个DDEO数据项目

    3.    利用DDE Srv Set Item.vi 向步骤2创建的DDE数据项目中发送数据

    4.    利用DDE Srv Unregister Item.vi删除前面创建的DDE数据项目

    5.    利用DDE Srv Unregister Service删除DDE服务

     

    创建DDE Client的步骤

    1.    利用DDE Open Conversation.vi打开与DDE Server的DDE通信

    2.    进行DDE通信

    3.    利用DDE Close Conversation.vi关闭打开的DDE通信通道

     

     

    Labview中的DDEClient和DDE Server之间的4种通信方式

    1.    利用Request Data命令(DDE Request。vi)向其他用用程序请求数据项目

    2.    利用Advise Data 命令(DDE Advise Start.vi,DDE Advise Check.vi)请求应用程序向LabVIEW发送一个数据

    3.    利用Poke Item命令(DDE Poke.vi)向应用程序发送数据

    4.    向DDE Server发送String命令(DDE Execute.vi),告诉它利用Execute命令来执行,当创建DDE Server时,Execute命令是无效的

    展开全文
  • 易语言DDE动态数据交换.rar 易语言DDE动态数据交换.rar 易语言DDE动态数据交换.rar 易语言DDE动态数据交换.rar 易语言DDE动态数据交换.rar 易语言DDE动态数据交换.rar
  • 易语言源码DDE动态数据交换.rar 易语言源码DDE动态数据交换.rar 易语言源码DDE动态数据交换.rar 易语言源码DDE动态数据交换.rar 易语言源码DDE动态数据交换.rar 易语言源码DDE动态数据交换.rar
  • DDE动态数据交换.rar

    2020-04-04 13:29:24
    DDE动态数据交换.rar
  • DDE动态数据交换 DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活...
  • 易语言DDE动态数据交换源码,DDE动态数据交换,打开读入文件,mydde,建立关联,取文件名,注册新消息,发送消息,设置窗口属性,调用窗口过程,打开内存共享文件,创建内存共享文件,映射文件,解除文件映射,关闭句柄,复制内存...
  • 介绍了关于动态数据交换(DDE)功能在火电厂的应用的详细说明,提供其它知识的技术资料的下载。
  • DDE动态数据交换 DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前...
  • DDE动态数据交换.e.rar

    2020-04-04 13:28:10
    DDE动态数据交换.e.rar
  • DDE动态数据交换
  • 动态数据交换 (DDE).

    2008-10-22 15:15:20
    如何使用 Word 和 Excel Visual C++ 中的使用动态数据交换 (DDE). 简单介绍了其应用方法
  • 【易语言源码】DDE动态数据交换.e
  • delphi下的动态数据交换技术DDE

    千次阅读 2014-01-10 10:56:52
    DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用程序...
    DDE是一种 动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows 应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。
    DDE(Dynamic data exchange)的工作原理是:
    甲方申请一块全局内存,然后把内存指针postmessage到乙方,乙方根据收到的指针访问那块全局内存。有几个API函数是做这种事的,你在MSDN里查一下 Dde 打头的函数全都出来了。因为是已经淘汰的技术,连MFC都 没对他进行封装。很难保证它同样会出现在以后的Windows API中。
    DDE 有三种连接方式:热连接、温连接、冷连接。
    冷连接:客服建立连接后,何时传递数据由客户端决定。当客户端需要数据时向服务端发送一个数据请求消息。
    温连接:不同于冷连接,由服务器主动发送数据更新请求,客户端决定是否更新数据。
    热连接:服务器主动更新数据,不需要客户端确认更新。
    展开全文
  • DDE动态数据交换

    2015-06-01 16:56:29
    各位大侠,你们好: 小弟最近在学习VB2010,发现Form属性中没有Linkmode属性,在EXCEL中也是查不到Linkmode属性,想请问下如何才能调出DDE的属性呢?
  • 动态数据交换DDE, Dynamic Data Exchange)简介 1、简介  DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户...

    动态数据交换(DDE, Dynamic Data Exchange)简介

    1、简介

     

         DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE)。使用DDE通讯需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用程序发送一条消息请求信息,服务器应用程序根据该信息作出应答,从而实现两个程序之间的数据交换。

      DDE(Dynamic data exchange)的工作原理是:

      甲方申请一块全局内存,然后把内存指针postmessage到乙方,乙方根据收到的指针访问那块全局内存。有几个API函数是做这种事的,你在MSDN里查一下 Dde 打头的函数全都出来了。因为是已经淘汰的技术,连MFC都没对他进行封装。很难保证它同样会出现在以后的Windows API中。

     

    2、交换方式

     

      (1)冷连接(CoolLink):数据交换是一次性数据传输,与剪贴板相同。当服务器中的数据发生变化后不通知客户,但客户可以随时从服务器读写数据;

      (2)温连接(WarmLink):当服务器中的数据发生变化后马上通知客户,客户得到通知后将数据取回;

      (3)热连接(HotLink):当服务器中的数据发生变化后马上通知客户,同时将变化的数据直接送给客户。

      DDE客户程序向DDE服务器程序请求数据时,它必须首先知道服务器的名称(即DDEService名)、DDE主题名称(Topics名),还要知道请求哪一个数据项的项目名称(Items名)。DDEService名应该具有唯一性,否则容易产生混乱。通常DDEService就是服务器的程序名称,但不是绝对的,它是由程序设计人员在程序内部设定好的,并不是通过修改程序名称就可以改变的。Topics名和Items名也是由DDEService在其内部设定好的,所有服务程序的Service名、Topics名都是注册在系统中,当一个客户向一个服务器请求数据时,客户必须向系统报告服务器的Service名和Topics名。只有当Service名、Topics名与服务器内部设定的名称一致时,系统才将客户的请求传达给服务器。

      当服务名和Topics名相符时,服务器马上判断Items名是否合法。如果请求的Item名是服务器中的合法数据项,服务器即建立此项连接,建立连接的数据发生数值变化后,服务器会及时通知客户。一个服务器可以有多个Topics名,Items名的数量也不受限制。

      DDE交换可以发生在单机或网络中不同计算机的应用程序之间。开发者还可以定义定制的DDE数据格式,进行应用程序之间特别目的IPC,它们有更紧密耦合的通信要求。大多数基于Windows的应用程序都支持DDE。但DDE有个明显的缺点就是,通信效率低下,当通信量较大时数据刷新速度慢,在数据较少时DDE较实用。

     

    3、编写程序

     

      为了使用方便起见,微软提供DDE管理库(TheDDEManagementLibrary,简称DDEML)。DDEML专门协调DDE通信,给DDE应用程序提供句柄字符串和数据交换的服务,消除了早期由于DDE协议不一致所引起的问题。

      使用DDEML开发的应用程序(客户/服务器)无论在运行一致性方面,还是在程序相互通信方面,性能均优于没有使用DDEML的应用程序。而且DDEML的应用使得开发支持DDE的应用程序容易了许多,因为DDEML(这是个DLL)担起了内务府总管的工作。使用DDEML后,实际上客户和服务器之间的多数会话并不是直达对方的,而是经由DDEML中转,即用Callback函数处理DDE交易(Transaction),而早期的消息通信是直接的。

      在调用其他DDEML函数前,客户/服务器必须调用DdeInitialize()函数,以获取实例标识符,注册DDECallback函数,并为Callback函数指定事务过滤。对于服务器,在使用DdeInitialize()初始化后,调用DdeCreateStringHandle()建立Service名、Topics名和Items名等标识的句柄,再通过DdeNameService()在操作系统中注册服务器的名字。根据这些句柄,客户就可以使用它提供的DDE服务了。

      为了执行某个DDE任务,许多DDEML函数需要获得字符串的访问权。例如:一个客户在调用DdeConnect()函数来请求同服务器建立会话时,必须指定Service名和Topics名。可以通过调用DdeCreateStringHandle()函数来获取特定字符串句柄。例如:

      HSZhszServName=DdeCreateStringHandle(idInst,"MyServer",CP_WINANSI);

      HSZhszSysTopic=DdeCreateStringHandle(idInst,SZDDESYS_TOPIC,CP_WINANSI);

      一个应用程序的DDE回调函数在大多DDE事务中接收多个字符串句柄。比如:在XTYP_REQUEST事务处理期间,一个DDE服务器接收两个字符串句柄:一个标识Topics名字符串,另一个标识Items名字符串。可以通过调用DdeQueryString()函数来获取相应于字符串句柄的字符串长度,并且复制字符串到应用程序定义的buffer中。例如:

      DWORDidInst;

      DWORDcb;

      HSZhszServ;

      PSTRpszServName;

      cb=DdeQueryString(idInst,hszServ,(LPSTR)NULL,0,CP_WINANSI)+1;

      pszServName=(PSTR)LocalAlloc(LPTR,(UINT)cb);

      DdeQueryString(idInst,hszServ,pszServName,cb,CP_WINANSI);

      根据微软MSDN,现有的基于消息DDE协议的应用程序与DDEML应用程序是相容的,也就是说,基于消息通信的DDE应用程序可以与DDEML应用程序对话和交易。在使用DDEML时,必须在源程序文件中包括ddeml.h头文件,连接user32.lib文件,并保证ddeml.dll文件正确的系统路径。

    转载于:https://www.cnblogs.com/h2co3orange/archive/2013/01/14/2859888.html

    展开全文
  • DDE实现动态数据交换

    千次阅读 2016-11-18 15:26:15
    eg:MT4就运用DDE让自己成为服务端,程序可利用DDE获取MT4的外汇报价数据实现实时更新。 先下载MT4运行,设置工具-选项-勾选启用为DDE服务器using NDde.Client;  public static DdeClient Create(string Symbol,...
  • C#中应用DDE技术实现动态数据交换

    万次阅读 2013-01-22 00:38:31
    DDE是个很老的东西了,...比如MT4就运用DDE让自己成为服务端,程序可利用DDE获取MT4的外汇报价数据实现实时更新。   using NDde.Client; private void MainForm_Load(object sender, EventArgs e) { try {
  • MT4就运用DDE让自己成为服务端,程序可利用DDE获取MT4的外汇报价数据实现实时更新。 先下载MT4运行,设置工具-选项-勾选启用为DDE服务器 然后用C# 实现获取行情数据 static void Main(string[] args) { ...
  • VB DDE数据交换技术

    2011-01-29 10:16:37
    这是正版,预览版的源码,看过预览版的朋友应该知道怎么回事了,不知道的下个预览版看看吧,预览版是免分下载的。(两个程序间的数据通信即DDE数据交换技术,近绝版源码)
  • MT4 DDE数据交换

    2020-05-08 17:20:58
    MT4是由迈达克研发的一款交易软件,该软件可以对接很多种交易数据,但是呢,想要从数据商那里获取数据,那就需要给数据商付费,当然获取数据的方式有很多种,这里介绍几种免费的数据来源。 1.从别人家网站上抓取...
  • c#与组态王6.52DDE数据交换

    热门讨论 2009-11-11 15:11:09
    本人花了三天,看了很多网络资料,一直没有找到有关c#与组态王DDE的代码,也看见很多人在问,我自已做了一个dll,用c#调用之,可以实现,现将c#调用示例及dll奉上,但愿能帮有需要的朋友一些忙,有什么问题,可以qq我...
  • IFIX 基于VC的动态数据交换及串口转发程序,是实际工程中的应用!
  • DDE是microsoft第二代的数据交换技术(第一代是剪贴板,第三代是OLE),虽然比较原始,但是在不支持OLE的程序里还是很有用的,他可以实现两个或多个独立程序(每个程序就是一个EXE)之间的自动或手动连接,实现两个...
  • 通讯录 Qt的动态数据交换
  • 动态数据交换(Dynamic Data Exchange)也是一种进程间通信形式。 两个同时运行的程序间通过DDE方式交换数据时是客户/服务器关系,一旦客户和服务器建立起来连接关系,则当服务器中的数据发生变化后就会马上通知客户。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,319
精华内容 2,527
关键字:

动态数据交换dde