|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Monitoring Applications
The application programming interface (API) elements of the DDEML can be used to create an application that monitors DDE activity in the system. Like any DDEML application, a DDE monitoring application contains a DDE callback function. The DDEML notifies a monitoring application's DDE callback function whenever a DDE event occurs, passing information about the event to the callback function. The application typically displays the information in a window or writes it to a file.
To receive notifications from the DDEML, an application must have registered as a DDE monitor by specifying the APPCLASS_MONITOR flag in a call to the DdeInitialize function. In this same call, the application can specify one or more monitor flags to indicate the types of events for which the DDEML is to notify the application's callback function. The following monitor flags can be specified by an application:
Flag Description MF_CALLBACKS Notifies the callback function whenever a transaction is sent to any DDE callback function in the system. MF_CONV Notifies the callback function whenever a conversation is established or terminated. MF_ERRORS Notifies the callback function whenever a DDEML error occurs. MF_HSZ_INFO Notifies the callback function whenever a DDEML application creates, frees, or increments the usage count of a string handle or whenever a string handle is freed as a result of a call to the DdeUninitialize function. MF_LINKS Notifies the callback function whenever an advise loop is started or ended. MF_POSTMSGS Notifies the callback function whenever the system or an application posts a DDE message. MF_SENDMSGS Notifies the callback function whenever the system or an application sends a DDE message.
The following example shows how to register a DDE monitoring application so that its DDE callback function receives notifications of all DDE events.
DWORD idInst; PFNCALLBACK lpDdeProc; hInst = hInstance; if (DdeInitialize( (LPDWORD) &idInst, /* instance identifier */ DDECallback, /* points to callback function */ APPCLASS_MONITOR | /* this is a monitoring application */ MF_CALLBACKS | /* monitor callback functions */ MF_CONV | /* monitor conversation data */ MF_ERRORS | /* monitor DDEML errors */
MF_HSZ_INFO | /* monitor data handle activity */ MF_LINKS | /* monitor advise loops */ MF_POSTMSGS | /* monitor posted DDE messages */ MF_SENDMSGS, /* monitor sent DDE messages */ 0)) /* reserved */ return FALSE;
The DDEML informs a monitoring application of a DDE event by sending an XTYP_MONITOR transaction to the application's DDE callback function. During this transaction, the DDEML passes a monitor flag that specifies the type of DDE event that has occurred and a handle of a DDE object that contains detailed information about the event. The DDEML provides a set of structures that the application can use to extract the information from the DDE object. There is a corresponding structure for each type of DDE event.
Structure Description MONCBSTRUCT Contains information about a transaction. MONCONVSTRUCT Contains information about a conversation. MONERRSTRUCT Contains information about the latest DDE error. MONLINKSTRUCT Contains information about an advise loop. MONHSZSTRUCT Contains information about a string handle. MONMSGSTRUCT Contains information about a DDE message that was sent or posted.
The following example shows the DDE callback function of a DDE monitoring application that formats information about each string handle event and then displays the information in a window. The function uses the MONHSZSTRUCT structure to extract the information from the DDE object.
HDDEDATA CALLBACK DDECallback(uType, uFmt, hconv, hsz1, hsz2, hdata, 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: /* Obtain a pointer to the global memory object. */ if (lpData = DdeAccessData(hdata, &cb)) {
/* Examine the monitor flag. */ switch (dwData2) { case MF_HSZ_INFO: #define PHSZS ((MONHSZSTRUCT FAR *)lpData) /* * The global memory object contains * string handle data. Use the MONHSZSTRUCT * structure to access the data. */ switch (PHSZS->fsAction) {
/* * Examine the action flags to * determine the action performed on * the handle. */ 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; default: DdeUnaccessData(hdata); return (HDDEDATA) 0;
} /* Write formatted output to a buffer. */ wsprintf(szBuf, "Handle %s, Task: %x, Hsz: %lx(%s)", (LPSTR) szAction, PHSZS->hTask, PHSZS->hsz, (LPSTR) PHSZS->str); . . /* Display text or write to a file. */ . break;
#undef PHSZS . . /* Process other MF_* flags. */ . default: break; } } /* Free the global memory object. */ DdeUnaccessData(hdata); break; default: break; } return (HDDEDATA) 0; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Проверка Приложений
Приложение, программирующее интерфейс элементов (API) DDEML может быть использовано, чтобы создавать приложение, которое проверяет деятельность DDE в системе. Подобно любому приложению DDEML, DDE, проверяющее приложение содержит функцию возврата DDE. DDEML Уведомляет проверку прикладной функции возврата DDE всякий раз, когда событие DDE происходит, прохождение информации о событии в функцию возврата. Приложение обычно отображает информацию в окне или записывает это в файл.
Чтобы получать уведомления из DDEML, приложение должно зарегистрировать как DDE проверяет определяя флаг APPCLASS_MONITOR на вызове в функцию DdeInitialize. На этом том же вызове, приложение может определить один или более флагов монитора, чтобы указывать типы событий для которых 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; если (DdeInitialize( (LPDWORD) &idInst, /* ИДЕНТИФИКАТОР примера */ DDECallback, /* точки на функцию возврата */ APPCLASS_MONITOR | /* это - проверяющее приложение */ MF_CALLBACKS | /* функции возврата монитора */ MF_CONV | /* данные разговора монитора */ MF_ERRORS | /* проверьте ошибки DDEML */
MF_HSZ_INFO | /* деятельность ручки данных монитора */ MF_LINKS | /* монитор советует циклы */ MF_POSTMSGS | /* монитор объявлял сообщения DDE */ MF_SENDMSGS, /* монитор посылал сообщения DDE */ 0)) /* зарезервированное */ обратная ЛОЖЬ;
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, hdata, dwData1, dwData2) UINT uType; UINT uFmt; HCONV hconv; hsz1 HSZ; hsz2 HSZ; HDDEDATA hdata; DWORD dwData1; DWORD dwData2; { LPVOID lpData; СИМВОЛ *szAction; СИМВОЛ szBuf[256]; cb DWORD; ключ (uType) { случай XTYP_MONITOR: /* Получите указатель в глобальную память object. */ если (lpData = DdeAccessData(hdata, &cb)) {
/* Изучите монитор flag. */ ключ (dwData2) { случай MF_HSZ_INFO: #define PHSZS ((MONHSZSTRUCT ЗНАЧИТЕЛЬНО *)lpData) /* * Глобальный объект памяти содержится * данные ручки строки. Используйте MONHSZSTRUCT * структура должна иметь доступ к данным. */ ключ (PHSZS->fsAction) {
/* * Изучите флаги действия, чтобы * определите действие выполненное на * ручка. */ случай MH_CREATE: szAction = "Создавался"; прерывание; случай MH_KEEP: szAction = "Увеличивался";
прерывание; случай MH_DELETE: szAction = "Удалялся"; прерывание; случай MH_CLEANUP: szAction = "Наводил порядок"; прерывание; умолчание: DdeUnaccessData(hdata); возврат (HDDEDATA) 0;
} /* Запись форматировала выход в buffer. */ wsprintf(szBuf, "Ручка %s, Задача: %x, Hsz: %lx(%s)", (LPSTR) szAction, PHSZS->hTask, PHSZS->hsz, (LPSTR) PHSZS->str); . . /* Отобразите текст или записывайтесь в file. */ . прерывание;
#undef PHSZS . . /* Обработайте другое MF_* flags. */ . умолчание: прерывание; } } /* Освободите глобальную память object. */ DdeUnaccessData(hdata); прерывание; умолчание: прерывание; } возврат (HDDEDATA) 0; }
|
|
|
|
| |