📄 dde函数.txt
字号:
DDEExecute()函数发出的命令必须能被应用程序解释。在执行命令前,用DDEInitiate()函数建立一个通向服务程序的通道。
例如,Mircrosoft Excel 有一个扩展的宏命令集合,包括允许 Microsoft Excel 向 VisualFoxPro 请求数据的 DDE 命令。如果建立了通向 Microsoft Excel 的通道,就可以用DDEExecute()函数从 Visual FoxPro 向 Microsoft Excel 发送宏命令。
如果接收命令的应用程序成功地执行命令,则 DDEExecute()返回“真”(.T.);如果接收命令的应用程序没有成功地执行命令,或者包含的通道号无效,则 DDEExecute)返回“假”(.F.)。如果包含了可选的异步用户自定义函数 cUDFName,则返回一个事务号;若发生错误,则 DDEExecute()返回 -1。
示例
以下示例使用 DDEInitiate()函数建立 Visual FoxPro 与 Microsoft Excel 工作表 Sheet1之间的 DDE 通道。使用 DDEExecute()函数执行 Microsoft Excel 命令,最大化Microsoft Excel 窗口。
gnChanNum = DDEInitiate('Excel', 'Sheet1')
IF gnChanNum != -1
glExecute = DDEExecute(gnChanNum, '[App.Maximize]')
IF glExecute != .F.
WAIT WINDOW 'EXCEL window has been zoomed out.'
ENDIF
= DDETerminate(gnChanNum) && 关闭通道
ENDIF
请参阅
DDEInitiate()函数
在 Visual FoxPro 和另一个 Microsoft Windows 应用程序之间建立一个动态数据交换DDE) 通道。
语法
DDEInitiate(cServiceName, cTopicName)
返值类型
数值型
参数描述
cServiceName
指定服务程序的名称。通常情况下,是一个不带扩展名的可执行文件名,Visual FoxPro 默认的服务名是 Visual FoxPro。如果建立通向 Microsoft Excel的通道,cServiceName 为 Excel。
CTopicName
指定主题名。主题根据应用程序的不同而不同,因此指定的主题必须能让应用程序理解。例如,绝大多数 DDE 服务程序提供一个 System 主题。有关应用程序支持的服务名和主题名内容,请参阅应用程序文档。
说明
DDEInitiate()在 Visual FoxPro 和 DDE 服务程序间建立一个 DDE 通道。通道建立后,Visual FoxPro 就可以在后续函数中通过指定通道从服务程序中请求数据。VisualFoxPro 也可以作为一个客户通过通道从服务程序中请求数据。
如果成功建立通道,则 DDElnitiate()返回通道号。通道号是非负值,所能建立的通道数量仅受系统资源的限制。
如果不能建立通道,则 DDEInitiate()返回 ?;如果没有打开服务程序,则 VisualFoxPro 询问是否要打开。选择“是”,Visual FoxPro 会试图打开这个应用程序(可以用 DDELastError()确定不能建立通道的原因)。
要避免询问是否打开应用程序,可设置 DDESetOption 的“SAFETY”选项,也可以使用带 /N 选项的 RUN 命令启动应用程序。
可以使用 DDETerminate()关闭一个通道。
示例
下面的示例使用 DDEInitiate()在 Visual FoxPro 和 Microsoft Excel 的工作表 Sheetl之间建立 DDE 通道。‘Excel’是服务名,‘Sheetl’是主题名。通道号存放在变量mchannum 中,可以供后续 DDE 函数使用。
mchannum = DDEInitiate('Excel', 'Sheet1')
IF mchannum != -1
* Process 进行客户操作
* = DDETerminate(mchannum) &&关闭通道
ENDIF
请参阅
DDEPoke()函数
在动态数据交换 (DDE) 会话中,在客户和服务程序之间传送数据。
语法
DDEPoke(nChannelNumber, cItemName, cDataSent[, cDataFormat [, cUDFName]])
返值类型
逻辑值
参数描述
nChannelNumber
指定发送应用程序数据的通道号。如果是服务程序通道,则 DDEPoke()响应一个请求,或响应以前建立的报告链接或自动链接发送数据。
CItemName
指定接收数据的项名。项名根据应用程序的不同而不同,并且必须能被应用程序理解。例如,Microsoft Excel 支持 R1C1 为有效项名,它指明工作表中的第一个单元
cDataSent
指定发送给项名的数据,项名由 cItemName 指定。
CDataFormat
指定发送数据的格式,默认格式是 CF_TEXT。在这种格式中,字段用 Tab键分隔,记录用回车和换行符分隔。
CUDFName
允许异步数据传送。如果省略 cUDFName,客户会等待一段时间,时间长短由 DDESetOption()指定。如果用 cUDFName 指定用户自定义函数,客户程序在请求之后继续执行下行代码。
当从服务程序得到数据时,执行 cUDFName 指定的用户自定义函数。用户自定义程序接受六个参数,参数按下列顺序传递:
参数 内容
Channel Number 服务程序的通道号
Action XACTCOMPLETE(成功的事务)
XACTFAIL(失败的事务)
Item 项名。例如,R1C1 表示 Microsoft Excel 工作表的单元
Data 新数据 (REQUEST) 或已传送的数据(POKE 或
EXECUTED )
Format 数据格式。例如,CF_TEXT
Transaction DDEPoke()返回的事务编号
Number
可使用 DDEAbortTrans()取消未完成的事务。如果事务失败了,可以用DDELastError()确定失败的原因。
若包含 cUDFName,事务成功时,DDEPoke()返回一个事务号;发生错误时返回 -1。
说明
DDEPoke()将数据以字符串形式发送给通道号指定的应用程序中的项名。
如果数据发送成功,则 DDEPoke()返回“真”(.T.);如果不能发送数据,则返回“假”(.F.)。如果包含一个异步用户自定义函数 cUDFName,则 DDEPoke()返回一个事务号;如果发生错误,DDEPoke()返回 -1。
DDERequest()函数
在动态数据交换 (DDE) 会话中,向一个服务程序请求数据。
语法
DDERequest(nChannelNumber cItemName [, cDataFormat [,cUDFName]])
返值类型
字符型
参数描述
nChannelNumber
指定服务程序的通道号。
CItemName
指定接收数据的项名,项名根据应用程序不同而不同,因此,指定的项名必须能被应用程序理解。例如,Microsoft Excel 支持 R1C1 为有效项名,它指明工作表的第一个单元。
CDataFormat
指定发送数据的格式,默认格式是 CF_TEXT。在这种格式中,字段用 Tab键分隔,记录用回车和换行符分隔。
CUDFName
允许异步数据传送。如果省略 cUDFName,Visual FoxPro 为从服务程序获取数据而等待一段时间,时间长短由 DDESetOption()指定。如果用cUDFName 指定用户自定义函数,Visual FoxPro 程序在请求之后马上执行下一行代码。
当从服务程序得到数据时,就执行 cUDFName 指定的用户自定义函数。用户自定义程序接受六个参数,参数按下列顺序传递:
参数 内容
Channel Number 服务程序的通道号
Action XACTCOMPLETE(成功的事务)
XACTFAIL(失败的事务)
Item 项名。例如,R1C1 表示 Microsoft Excel 工作单的单元
Data 新数据 (REQUEST) 或已传送的数据(POKE 或EXECUTED)
Format 数据格式。例如,CF_TEXT
Transaction
Number DDEPoke()返回的事务编号
使用 DDEAbortTrans()取消未完成的事务。如果事务失败,可用 DDELastError()确定失败的原因。
当包含 cUDFName 时,事务成功则 DDEPoke()返回一个大于等于 0 的事务号,出错则返回 -1。
说明
在用 DDERequest()请求数据之前,必须用 DDEInitiate()建立通向服务程序的通道。
如果数据请求成功,DDERequest()以字符串的形式返回数据;如果请求失败,DDERequest()返回一个空字符串,且 DDELastError()返回一个非零值。如果包含异步用户自定义函数 cUDFName,则在事务成功时,DDERequest()返回一个事务号;发生错误则返回 -1 。
示例
以下示例使用了 DDEInitiate()函数建立 VisualFoxPro 与名为Sheet1 的 MicrosoftExcel 工作表之间的 DDE 通道。“Excel”是服务名称,“Sheet1”是主题名称。通道号存储在变量 mchannum 中,以便在随后的 DDE 函数中使用
DDERequest()要求数据项名称为 R1C1,电子表格 Sheet1 第一行和第一列中的数据。
mchannum = DDEInitiate('Excel', 'Sheet1')
IF mchannum != -1
mrequest = DDERequest(mchannum, 'R1C1')
IF !EMPTY(mrequest) AND DDELastError()= 0 && 成功
WAIT WINDOW 'R1C1 contents: ' + mrequest
ENDIF
= DDETerminate(mchannum) && 关闭通道
ENDIF
请参阅
DDESetOption()函数
更改或返回动态数据交换 (DDE) 的设置。
语法
DDESetOption(cOption [, nTimeoutValue | lExpression])
返值类型
逻辑值或数值型
参数描述
cOption
指定设置选项。
Coption 设置 默认值 说明
TIMEOUT Ntimeout 2000 DDE 函数等待服务程序响应的毫秒数。
Value(毫秒数) 如果省略 nTimeoutValue,则返回当前的
TIMEOUT 值。
SAFETY lExpression .T. 使用 DDEInitiate()建立一个通向服务
(“真”(.T.)或“假”(.F.)) 程序的通道,且应用程序没有响应时,
指定是否显示对话框。如果省略
lExpression,则返回当前的 SAFETY 设置
nTimeoutValue
指定超时值。L
Expressio
启用或禁止对话框的显示。
说明
使用 DDESetOption()可以改变或返回 DDE 设置。有两个选项可用:TIMEOUT 和SAFETY。
DDESetService()函数
创建、释放或更新 DDE 服务名和设置。
语法
DDESetService(cServiceName, cOption [, cDataFormat | lExpression])
返值类型
逻辑值
参数描述
cServiceName
指定要创建、释放、更改或返回信息的服务名。
COption
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -