上帝保佑 - God4

God Bless

  :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

根据MIME格式处理eml文件是件挺烦琐的事,直接利用Outlook Express来处理就要简单一些,但是Outlook Express没有命令行操作(或许是我没找到),这就使得调用Outlook Express来处理eml邮件也有些麻烦.

下面是我写的windows情况下的调用Outlook Express来提取附件的函数,但是总不能隐藏Outlook Express窗口,不知道有高手知道原因不:

BOOL ExtractAttach(TCHAR * FileName, TCHAR * OutPath)
{
    
//打开eml电子邮件
    TCHAR lpApplicationName[] = "C:\\Program Files\\Outlook Express\\msimn.exe";
    TCHAR lpCommandLine[MAX_PATH] 
= " /eml:";
    strcat(lpCommandLine, FileName);

    PROCESS_INFORMATION piProcInfo;
    STARTUPINFO siStartInfo;
    ZeroMemory( 
&siStartInfo, sizeof(siStartInfo) );
    siStartInfo.cb 
= sizeof(STARTUPINFO);
    siStartInfo.dwFlags 
= STARTF_USESHOWWINDOW;
    siStartInfo.wShowWindow 
= SW_HIDE; //发送隐藏消息也不行,还是显示窗口

    
if!CreateProcess( lpApplicationName, lpCommandLine, NULL, NULL, FALSE, 
        CREATE_NEW_CONSOLE, NULL, NULL, 
&siStartInfo, &piProcInfo ) )
        
return FALSE;

    
//寻找打开的电子邮件窗口
    HWND hOeWnd = NULL;
    DWORD dwProcessId 
= 0;
    
do {
        hOeWnd 
= FindWindow( "ATH_Note", NULL );
    }
 while( hOeWnd==NULL );
    
    
if( GetWindowThreadProcessId(hOeWnd, &dwProcessId) && dwProcessId!=piProcInfo.dwProcessId )
        
return FALSE;

    
//打开保存附件窗口
    if!PostMessage(hOeWnd, WM_COMMAND, 0x819CA6, NULL) ) //0x819CA6 "Save Attachments"
        return FALSE;

    
//寻找打开的保存附件窗口
    HWND hSaveAttWnd = NULL;
    
do {
        hSaveAttWnd 
= FindWindow( NULL, "Save Attachments" );
    }
 while( hSaveAttWnd==NULL );

    
//寻找输出路径编辑框并修改
    HWND hChildWnd;
    TCHAR buf[MAX_PATH];
    
do {
        
for( hChildWnd=GetTopWindow(hSaveAttWnd); hChildWnd!=NULL; hChildWnd=GetNextWindow(hChildWnd, GW_HWNDNEXT) )
        
{
            GetClassName(hChildWnd, buf, MAX_PATH);
            
if( stricmp(buf, TEXT("Edit"))==0 )
            
{
                SendMessage(hChildWnd, WM_SETTEXT, 
0, (LPARAM)OutPath);
                
break;
            }

        }

    }
 while( hChildWnd==NULL );

    
//双击保存按钮
    do {
        
for( hChildWnd=GetTopWindow(hSaveAttWnd); hChildWnd!=NULL; hChildWnd=GetNextWindow(hChildWnd, GW_HWNDNEXT) )
        
{
            GetWindowText(hChildWnd, buf, MAX_PATH);
            
if( stricmp(buf, TEXT("&Save"))==0 )
            
{
                PostMessage(hChildWnd, WM_LBUTTONDOWN, 
00);
                PostMessage(hChildWnd, WM_LBUTTONUP, 
00);
                
break;
            }

        }

    }
 while( hChildWnd==NULL );

    
//发送退出消息
    PostMessage(hOeWnd, WM_KEYDOWN, VK_ESCAPE, 0);

    
//等待退出
    if( WaitForSingleObject(piProcInfo.hProcess, 4000)==WAIT_TIMEOUT )
        
return FALSE;

    
return TRUE;
}

源代码下载:
/Files/God4/AttachExtractor.rar
posted on 2007-10-03 11:56  God4  阅读(2745)  评论(0)    收藏  举报