|
Posted on 2008-11-04 19:27 S.l.e!ep.¢% 閱讀(2283) 評論(4) 編輯 收藏 引用 所屬分類: VC
為了生成 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;
}
Feedback
# re: 為了生成flash文件方便,寫了個工具 回復 更多評論
2008-11-05 02:11 by
這個代碼好像在www.zuiwanting.com見過
# re: 為了生成flash文件方便,寫了個工具 回復 更多評論
2008-11-05 12:55 by
好像是在命令行調用什么工具來編譯fla文件為swf 其實用C++寫這樣的功能太浪費了 用一個bat或VBS完全能搞定的
# re: 為了生成flash文件方便,寫了個工具 回復 更多評論
2008-11-05 14:19 by
該頁面有木馬………………
最近發現cppblog好多頁面都被掛了木馬,大家小心一下
# re: 為了生成flash文件方便,寫了個工具 回復 更多評論
2008-11-10 22:21 by
你是指這個頁面有馬?
暈,我沒裝殺毒軟件啊!!!!
|