为了生成flash文件方便,写了个工具

为了生成 swf 方法,写了个工具,写得,写得很粗糙……

#include  < string >
#include 
< vector >
#include 
< iostream >
using   namespace  std;
#include 
< windows.h >
#include 
< atlbase.h >

namespace  std
{
    typedef basic_string
<WCHAR, char_traits<WCHAR>, allocator<WCHAR> > tstring;
}


/**/ /*
 * return a absolute path and create a temporary file 
 * the path is the system temp directory, 
 * the filename is a temporary file name contains [strTmp] 
 * Tips!!!  Must delete the temporary file after used
 
*/

string  getTempFilePath( string  strTmp)
{
    TCHAR szTmpPath[_MAX_PATH] 
= {0}, szTmpFileName[_MAX_PATH] = {0};

    DWORD dwLength 
= ::GetTempPath(_MAX_PATH, szTmpPath); 

    
/**//*
     * If the function [GetTempPath] fails, return a null string
     
*/

    
if ( dwLength == 0 )
        
return __TEXT("");

    DWORD dwLength2 
= ::GetTempFileName(szTmpPath, strTmp.c_str(), 0, szTmpFileName);

    
/**//*
     * If the function [GetTempFileName] fails, return a null string
     
*/

    
if ( dwLength2 == 0 )
        
return __TEXT("");

    
return szTmpFileName;
    
}
//  _getTempFilePath()

int  main( int  argc,  char *  argv[])  
{    
    
int nArgs = 0;
    std::vector
<std::tstring> vecToken;

    LPWSTR 
* szArglist = ::CommandLineToArgvW(::GetCommandLineW(), &nArgs);

    
if( NULL == szArglist )
    
{
        cout 
<< "Invalid Parameter!" << endl;
        
return 1;
    }

    
else
    
{
        
for(int i = 0; i < nArgs; i++
             vecToken.push_back(szArglist[i]);

    }
// if( NULL == szArglist )

    
// Free memory allocated for CommandLineToArgvW arguments.
    LocalFree(szArglist);

    
if ( vecToken.size() != 3 )
    
{
        cout 
<< "Invalid Parameter! " << vecToken.size() << endl;
        
return 1;
    }


    USES_CONVERSION;
    
//cout << (char*)W2A(vecToken[1].c_str()) << endl;
    
//cout << (char*)W2A(vecToken[2].c_str()) << endl;

    
// 获取目标目录所有 *.fla 文件
    WIN32_FIND_DATA filedata;
    
char strResultLogPath[MAX_PATH] = {0};
    sprintf(strResultLogPath, _T(
"%s\\*.fla"), W2A(vecToken[1].c_str()) );
    std::vector
<string> vecFlaLogs;

    HANDLE hFind 
= ::FindFirstFile(strResultLogPath, &filedata); 
    
if (hFind == INVALID_HANDLE_VALUE) 
    
{
        
// 一个 .fla 文件都没有
    }

    
else
    
{
        
do 
        
{
            
// filedata.cFileName 为 fla 的文件名
            vecFlaLogs.push_back(filedata.cFileName);
            OutputDebugString(filedata.cFileName);
            OutputDebugString(
"\n");
        }
 while( FindNextFile(hFind, &filedata) );

    }
// if (hFind == INVALID_HANDLE_VALUE) 
    ::FindClose(hFind);

    
// 存放临时文件
    string strFile  = getTempFilePath("fl");
    
string strFile1 = strFile;
    strFile 
+= ".jsfl";

    FILE
* pFile = fopen(strFile.c_str(), "wb");
    
if ( pFile == NULL )
    
{
        cout 
<< "failed to open file: " << strFile.c_str() << endl;
        
return 1;
    }


    std::vector
<string>::iterator iter_t;
    
for ( iter_t = vecFlaLogs.begin(); iter_t != vecFlaLogs.end(); iter_t++ )
    
{
        
string strFlaFile = *iter_t;
        
string strSwfFile = *iter_t;

        strSwfFile 
= strSwfFile.substr(0, strSwfFile.length() - 4);
        strSwfFile 
+= ".swf";
        
        fprintf(pFile, 
"var sourceFile = \"file:/**////%s/%s\";\r\n", W2A(vecToken[1].c_str()), strFlaFile.c_str());
        fprintf(pFile, "var outputFile = \"file:/**////%s/%s\";\r\n", W2A(vecToken[2].c_str()), strSwfFile.c_str());
        fprintf(pFile, "var doc = fl.openDocument(sourceFile);\r\n");
        fprintf(pFile, 
"doc.exportSWF(outputFile, true);\r\n");
        fprintf(pFile, 
"doc.close(false);\r\n");

    }
// for ( iter_t = vecFlaLogs.begin(); iter_t != vecFlaLogs.end(); iter_t++ )

    fprintf(pFile, 
"fl.quit();\r\n");
    
    
// 关闭文件时才保存文件内容
    fclose(pFile);

    
// 读取注册表
    HKEY hk;
    LPCTSTR data_Get
="Flash.JSCommandFile\\shell\\open\\command";
    
//在注册表里的位置 
    long ret0 = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, //
                               data_Get, 0//必须为0,保留 
                               KEY_READ,       //安全访问屏蔽字,具体见MSDN,列出了所有的值 
                               &hk);
    
    
//通过ERROR_SUCCESS判断打开是否成功。 
    if( ret0 != ERROR_SUCCESS) 
    
{
        cout 
<< "failed to read regedit" << endl;
        
return 1;
    }


    LPBYTE win_version 
= new BYTE[80];
    DWORD type
=REG_SZ;
    DWORD cbData
=80;
    
long ret1 = ::RegQueryValueEx(hk, ""//请求得到的键的名称
                                  NULL,                //保留,必须为
                                  NULL,           //值的类型,具体见MSDN
                                  win_version,         //接受值的缓冲区 
                                  &cbData);            //缓冲区大小
    
    
if ( ret1 != ERROR_SUCCESS )
    
{
        cout 
<< "failed to read regedit" << endl;
        
return 1;
    }
 

    
string strRegValue = (char*)win_version;
    delete[] win_version;
    ::RegCloseKey(hk);
    
    strRegValue 
= strRegValue.substr(0, strRegValue.length() - 5);

    
// 调用 flash.exe
    
//strRegValue
    strRegValue += " ";
    strRegValue 
+= "\"";
    strRegValue += strFile;    
    strRegValue 
+= "\"";

    UINT rlt 
= WinExec(strRegValue.c_str(), SW_HIDE);
    
    
switch (rlt) 
    
{
    
case 0:
        
{
            cout 
<< "The system is out of memory or resources." << endl;
            
return 1;
        }

        
break;

    
case ERROR_BAD_FORMAT:
        
{
            cout 
<< "The .exe file is invalid." << endl;
            
return 1;
        }

        
break;

    
case ERROR_FILE_NOT_FOUND:
        
{
            cout 
<< "The specified file was not found." << endl;
            
return 1;
        }

        
break;
        
    
case ERROR_PATH_NOT_FOUND:
        
{
            cout 
<< "The specified path was not found." << endl;
            
return 1;
        }

        
break;        
    }


    
// 删除临时文件
    ::DeleteFile(strFile.c_str());
    ::DeleteFile(strFile1.c_str());

    
return 0;
}

你可能感兴趣的:(为了生成flash文件方便,写了个工具)