监控应用程序

【勇芳软件工作室】汉化HomePreviousNext

DDEML的应用程序编程接口(API)元素可用于创建一个监视系统中DDE活动的应用程序。像任何DDEML应用程序一样,DDE监视应用程序包含一个DDE回调函数。当DDE事件发生时,DDEML会通知监视应用程序的DDE回调函数,将关于事件的信息传递给回调函数。应用程序通常在窗口中显示信息或将其写入文件。

要从DDEML接收通知,应用程序必须通过在调用DdeInitialize函数中指定APPCLASS_MONITOR标志来注册为DDE监视器。在同一个调用中,应用程序可以指定一个或多个监视器标志,以指示DDEML要通知应用程序的回调函数的事件类型。应用程序可以指定以下监视器标志:

描述
MF_CALLBACKS当事务发送到系统中的任何DDE回调函数时通知回调函数。
MF_CONV通话建立或终止时通知回调功能。
MF_ERRORS当发生DDEML错误时通知回调函数。
MF_HSZ_INFO当DDEML应用程序创建,释放或增加字符串句柄的使用次数时,或者当调用DdeUninitialize函数的结果释放字符串句柄时,通知回调函数。
MF_LINKS每当建议循环启动或结束时通知回调函数。
MF_POSTMSGS系统或应用程序发布DDE消息时通知回调函数。
MF_SENDMSGS系统或应用程序发送DDE消息时通知回调函数。

以下示例显示如何注册DDE监视应用程序,使其DDE回调函数接收到所有DDE事件的通知。

DWORD idInst;

PFNCALLBACK lpDdeProc;

hInst = hInstance;

if(DdeInitialize(

(LPDWORD)& idInst,/ *实例标识符* /en

DDECallback,/ *指向回调函数* /

APPCLASS_MONITOR | / *这是一个监控应用程序* /

MF_CALLBACKS | / *监听回调函数* /

MF_CONV | / *监控对话数据* /

MF_ERRORS | / *监视DDEML错误* /

MF_HSZ_INFO | / *监控数据处理活动* /

MF_LINKS | / *监控建议循环* /

MF_POSTMSGS | / *监控发布的DDE消息* /

MF_SENDMSGS,/ *监控发送DDE消息* /

0))/ *保留* /

return FALSE;

DDEML通过向应用程序的DDE回调函数发送一个XTYP_MONITOR事务来通知一个DDE事件的监视应用程序。在此事务期间,DDEML传递一个监视器标志,该标志指定发生的DDE事件的类型以及包含有关该事件的详细信息的DDE对象的句柄。DDEML提供了一组应用程序可以从DDE对象中提取信息的结构。每种类型的DDE事件都有相应的结构。

结构体描述
MONCBSTRUCT包含有关交易的信息。
MONCONVSTRUCT包含有关对话的信息。
MONERRSTRUCT包含有关最新DDE错误的信息。
MONLINKSTRUCT包含有关建议循环的信息。
MONHSZSTRUCT包含有关字符串句柄的信息。
MONMSGSTRUCT包含有关发送或发布的DDE消息的信息。

以下示例显示DDE监视应用程序的DDE回调函数,用于格式化有关每个字符串句柄事件的信息,然后在窗口中显示信息。该函数使用MONHSZSTRUCT结构从DDE对象中提取信息。

HDDEDATA CALLBACK DDECallback(uType,uFmt,hconv,hsz1,hsz2,

-ruleHData,dwData1,dwData2)

UINT uType;

UINT uFmt;

HCONV hconv;

HSZ hsz1;

HSZ hsz2;

HDDEDATA hdata;

DWORD dwData1;

DWORD dwData2;

{

LPVOID lpData;

CHAR *szAction;

CHAR szBuf[256];

DWORD cb;

switch(uType){

case XTYP_MONITOR:

/ *获取指向全局内存对象的指针。*/

if (lpData = DdeAccessData(hdata, &cb)) {

/ *检查监视器标志。*/

switch(dwData2){

case MF_HSZ_INFO:

#define PHSZS((MONHSZSTRUCT FAR *)lpData)

/*

*全局内存对象包含

*字符串句柄数据。使用MONHSZSTRUCT

*结构访问数据。

*/

开关(PHSZS- > fsAction){

/*

*检查动作标志

*确定执行的操作

* 手柄。

*/

case MH_CREATE:

szAction = "Created";

break;

case MH_KEEP:

szAction = "Incremented";

break;

case MH_DELETE:

szAction = "Deleted";

break;

case MH_CLEANUP:

szAction = "Cleaned up";

break;

默认:

DdeUnaccessData(hdata);

return (HDDEDATA) 0;

}

/ *将格式化的输出写入缓冲区。*/

wsprintf(szBuf,

“处理%s,任务:%x,Hsz:%lx(%s)”,

(LPSTR)szAction,PHSZS- {989 796 004} hTask,

PHSZS->hsz, (LPSTR) PHSZS->str);

.

./ *显示文本或写入文件。*/

.

break;

#undef PHSZS

.

./ *处理其他MF_ *标志。*/

.

默认:

break;

}

}

/ *释放全局内存对象。*/

DdeUnaccessData(hdata);

break;

默认:

break;

}

return (HDDEDATA) 0;

}