Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |
Подскажите, пожалуйста, как получить com-объект... 03.10.01 20:08 Число просмотров: 1117
Автор: + <Mikhail> Статус: Elderman Отредактировано 04.10.01 03:44 Количество правок: 1
|
> Как получить COM-объект IMessage из письма Outlook Express? > Есть HWND окна с письмом :))
sozdai ATL project i ispolzui ATLAPI AtlAxGetControl( HWND h, IUnknown** pp )
poluchish pointer na interface controla, a dalshe poshel queryInterface i t.d.
> Или, если кто знает, как получить текст письма?
Bot Primer is MSDN kak kovyriatsia v messagah:
#import "d:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
#import <cdosys.dll> no_namespace raw_interfaces_only
#include <iostream.h>
#include <assert.h>
#include <wchar.h>
void main(int argc, char* argv[])
{
CoInitialize(NULL);
IDropDirectory* pDropDir = NULL;
IMessages* pMsgs = NULL;
IUnknown* pUnk = NULL;
IEnumVARIANT* pEnum = NULL;
CoCreateInstance(
__uuidof(DropDirectory),
NULL,
CLSCTX_SERVER,
__uuidof(IDropDirectory),
(void**)&pDropDir));
pDropDir->GetMessages(L"",&pMsgs);
long count = 0;
pMsgs->get_Count(&count);
cout << count << endl;
pMsgs->get__NewEnum(&pUnk);
pUnk->QueryInterface(__uuidof(IEnumVARIANT),(void**)&pEnum);
ULONG cFetched = 0;
VARIANT var;
VariantInit(&var);
while (1) {
cFetched = 0;
pEnum->Next(1,&var,&cFetched);
cout << "fetched: " << cFetched << endl;
if(cFetched == 0)
break;
assert(var.vt == VT_DISPATCH);
IMessage* pMsg = NULL;
var.pdispVal->QueryInterface(__uuidof(IMessage),(void**)&pMsg);
var.pdispVal->Release();
VariantClear(&var);
VARIANT varIntf;
VariantInit(&varIntf);
V_VT(&varIntf) = VT_DISPATCH;
varIntf.pdispVal = pMsg;
varIntf.pdispVal->AddRef();
BSTR szFilename;
pMsgs->get_FileName(varIntf,&szFilename);
VariantClear(&varIntf);
cout << _bstr_t(szFilename) << endl;
wchar_t* pwchar;
pwchar = wcsrchr(szFilename,'\\');
_bstr_t mailfilename(pwchar+1);
BSTR to;
pMsg->get_To(&to);
wchar_t* pWChar = to;
wchar_t szbuffer[100];
wchar_t lt = '<';
wchar_t amp = '@';
wchar_t* pFirst;
unsigned int curPos = 0;
_bstr_t mailboxesroot = "c:\\mailboxes\\";
for(unsigned int k = 0;k<wcslen(pWChar);k++){
if(pWChar[k] == lt) {
pFirst = &pWChar[k];
curPos = k;
}
if(pWChar[k] == amp) {
cout << "amp" << endl;
wcsncpy(szbuffer,pFirst+1,k-curPos-1);
buffer[k-curPos-1] = (wchar_t)'\0';
_bstr_t filen = mailboxesroot + _bstr_t(buffer) + "\\" + _bstr_t(mailfilename);
_Stream* pStrm = NULL;
pMsg->GetStream(&pStrm);
pStrm->SaveToFile(filen,adSaveCreateOverWrite);
pStrm->Release();
}
}
pMsg->Release();
}
CoUninitialize();
}
---
|
|
<programming>
|
Подскажите, пожалуйста, как получить com-объект... 03.10.01 16:52
Автор: Denis (not a hacker) Статус: Незарегистрированный пользователь
|
Как получить COM-объект IMessage из письма Outlook Express? Есть HWND окна с письмом :))
Или, если кто знает, как получить текст письма?
|
 |
Подскажите, пожалуйста, как получить com-объект... 03.10.01 20:08
Автор: + <Mikhail> Статус: Elderman Отредактировано 04.10.01 03:44 Количество правок: 1
|
> Как получить COM-объект IMessage из письма Outlook Express? > Есть HWND окна с письмом :))
sozdai ATL project i ispolzui ATLAPI AtlAxGetControl( HWND h, IUnknown** pp )
poluchish pointer na interface controla, a dalshe poshel queryInterface i t.d.
> Или, если кто знает, как получить текст письма?
Bot Primer is MSDN kak kovyriatsia v messagah:
#import "d:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
#import <cdosys.dll> no_namespace raw_interfaces_only
#include <iostream.h>
#include <assert.h>
#include <wchar.h>
void main(int argc, char* argv[])
{
CoInitialize(NULL);
IDropDirectory* pDropDir = NULL;
IMessages* pMsgs = NULL;
IUnknown* pUnk = NULL;
IEnumVARIANT* pEnum = NULL;
CoCreateInstance(
__uuidof(DropDirectory),
NULL,
CLSCTX_SERVER,
__uuidof(IDropDirectory),
(void**)&pDropDir));
pDropDir->GetMessages(L"",&pMsgs);
long count = 0;
pMsgs->get_Count(&count);
cout << count << endl;
pMsgs->get__NewEnum(&pUnk);
pUnk->QueryInterface(__uuidof(IEnumVARIANT),(void**)&pEnum);
ULONG cFetched = 0;
VARIANT var;
VariantInit(&var);
while (1) {
cFetched = 0;
pEnum->Next(1,&var,&cFetched);
cout << "fetched: " << cFetched << endl;
if(cFetched == 0)
break;
assert(var.vt == VT_DISPATCH);
IMessage* pMsg = NULL;
var.pdispVal->QueryInterface(__uuidof(IMessage),(void**)&pMsg);
var.pdispVal->Release();
VariantClear(&var);
VARIANT varIntf;
VariantInit(&varIntf);
V_VT(&varIntf) = VT_DISPATCH;
varIntf.pdispVal = pMsg;
varIntf.pdispVal->AddRef();
BSTR szFilename;
pMsgs->get_FileName(varIntf,&szFilename);
VariantClear(&varIntf);
cout << _bstr_t(szFilename) << endl;
wchar_t* pwchar;
pwchar = wcsrchr(szFilename,'\\');
_bstr_t mailfilename(pwchar+1);
BSTR to;
pMsg->get_To(&to);
wchar_t* pWChar = to;
wchar_t szbuffer[100];
wchar_t lt = '<';
wchar_t amp = '@';
wchar_t* pFirst;
unsigned int curPos = 0;
_bstr_t mailboxesroot = "c:\\mailboxes\\";
for(unsigned int k = 0;k<wcslen(pWChar);k++){
if(pWChar[k] == lt) {
pFirst = &pWChar[k];
curPos = k;
}
if(pWChar[k] == amp) {
cout << "amp" << endl;
wcsncpy(szbuffer,pFirst+1,k-curPos-1);
buffer[k-curPos-1] = (wchar_t)'\0';
_bstr_t filen = mailboxesroot + _bstr_t(buffer) + "\\" + _bstr_t(mailfilename);
_Stream* pStrm = NULL;
pMsg->GetStream(&pStrm);
pStrm->SaveToFile(filen,adSaveCreateOverWrite);
pStrm->Release();
}
}
pMsg->Release();
}
CoUninitialize();
}
---
|
|
|