Как получить список открытых документов для Word и Excel?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
stvden
Сообщения: 5
Зарегистрирован: 09 фев 2005, 22:13

Как получить список открытых документов для Word и Excel?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Это можно сделать через DDE (Dynamic Data Exchange). Подробный код писать не стану, лишь расскажу как это делается...

Инициализируешь DDE функцией DdeInitialize();
Устанавливаешь соединение с DDE-сервером (в данном случае "WinWord" или "Excel") функцией DdeConnect(), имя топика "System".
Отправляешь DDE-запрос с параметром "Topics" функцией DdeClientTransaction(), тип транзакции XTYP_REQUEST, формат данных CF_TEXT.
Полученный результат преобразуешь в строку функциями DdeAccessData() и DdeGetData().
В результате получается строка со списком DDE-топиков, которые разделены между собой символами табуляции. Первым в списке будет топик "System", а дальше будут имена открытых документов.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Если кому это интересно, могу предоставить небольшой пример кода под 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;
}
файлы stddde.h и stddde.cpp, в которых содержатся классы С++ для работы с DDE можно скачать отсюда:
[url]http://download.microsoft.com/dow ... S/4224.exe
[/url]

Не забудьте также вставить в файл stdafx.h строку
#include <afxwin.h>
и включите в проект использование библиотек MFC.
Ответить