Как получить список открытых документов для Word и Excel?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Как получить список открытых документов для Word и Excel?
Это можно сделать через DDE (Dynamic Data Exchange). Подробный код писать не стану, лишь расскажу как это делается...
Инициализируешь DDE функцией DdeInitialize();
Устанавливаешь соединение с DDE-сервером (в данном случае "WinWord" или "Excel") функцией DdeConnect(), имя топика "System".
Отправляешь DDE-запрос с параметром "Topics" функцией DdeClientTransaction(), тип транзакции XTYP_REQUEST, формат данных CF_TEXT.
Полученный результат преобразуешь в строку функциями DdeAccessData() и DdeGetData().
В результате получается строка со списком DDE-топиков, которые разделены между собой символами табуляции. Первым в списке будет топик "System", а дальше будут имена открытых документов.
Инициализируешь DDE функцией DdeInitialize();
Устанавливаешь соединение с DDE-сервером (в данном случае "WinWord" или "Excel") функцией DdeConnect(), имя топика "System".
Отправляешь DDE-запрос с параметром "Topics" функцией DdeClientTransaction(), тип транзакции XTYP_REQUEST, формат данных CF_TEXT.
Полученный результат преобразуешь в строку функциями DdeAccessData() и DdeGetData().
В результате получается строка со списком DDE-топиков, которые разделены между собой символами табуляции. Первым в списке будет топик "System", а дальше будут имена открытых документов.
Если кому это интересно, могу предоставить небольшой пример кода под MFC:
файлы stddde.h и stddde.cpp, в которых содержатся классы С++ для работы с DDE можно скачать отсюда:
[url]http://download.microsoft.com/dow ... S/4224.exe
[/url]
Не забудьте также вставить в файл stdafx.h строку
#include <afxwin.h>
и включите в проект использование библиотек MFC.
Код: Выделить всё
#include "stdafx.h"
#include "stddde.h"
int main(int argc, char* argv[])
{
afxCurrentAppName = "TopicList";
CDDEServer init;
init.Create(afxCurrentAppName);
CDDEConv *dde = new CDDEConv(&init);
init.AddConversation(dde);
if (!dde->ConnectTo("Excel", "System"))
return ::MessageBox(0, "Соединение с Excel не установлено!",
afxCurrentAppName, MB_ICONEXCLAMATION);
char *pData;
DWORD dwSize;
dde->Request("Topics", (void**)&pData, &dwSize);
::MessageBox(0, pData, afxCurrentAppName, MB_ICONASTERISK);
delete pData;
return 0;
}
[url]http://download.microsoft.com/dow ... S/4224.exe
[/url]
Не забудьте также вставить в файл stdafx.h строку
#include <afxwin.h>
и включите в проект использование библиотек MFC.