现在的位置: 首页 > 综合 > 正文

用flash调用VC打开文件对话框,取得路径。

2013年09月12日 ⁄ 综合 ⁄ 共 6745字 ⁄ 字号 评论关闭

    本来想用flash的as2调用html+javascript的方法取得本地路径,但项目催得紧,没有时间研究基本不会的html了。只好使用熟悉的vc,捣鼓了一整天,凑合出一个解决方法来。不罗嗦了,见正文。

======================flash端的as2脚本如下:

//call Open file dialog

//fscommand("exec", "deleteFile.exe");

//fscommand("exec", "forFlash.exe");

 

System.useCodepage = true;

 

//System.setClipboard( "Hello   world ");

 

 

var gFilePath:String;

 

function btn1_fun() {

var my_lv:LoadVars = new LoadVars();

var bIsStopWait:Boolean = false;

var intervalId:Number;

var duration:Number = 300000;//5 minus

 

fscommand("exec", "openFile.exe");

intervalId = setInterval(timerEvent, duration);

my_lv.load("fscommand/filePath.txt",my_lv,"GET");

 

function timerEvent():Void {

bIsStopWait = true;

clearInterval(intervalId);

title_txt.text = "Time is over.";

//my_lv.load("fscommand/filePath.txt",my_lv,"GET");

}

 

 

my_lv.onData = function(src:String) {

if (src == undefined) {

trace("Error loading title.");

title_txt.text = "loading...";

 

if (true == bIsStopWait) {

title_txt.text = "Time is over.";

bIsStopWait = false;

return;

}

my_lv.load("fscommand/filePath.txt",my_lv,"GET");

return;

} else {

clearInterval(intervalId);

if ("Error_Or_Cancel" == src) {

title_txt.text = "User not open a file.";

} else {

title_txt.text = src;

loadContent(src);

//file path process

gFilePath=src;

}

//call  delete path file

fscommand("exec", "deleteFile.exe");

return;

}

};

}

 

function loadContent(pCon:String) {

var my2_lv:LoadVars = new LoadVars();

my2_lv.onData = function(src:String) {

if (src == undefined) {

trace("Error loading content.");

return;

}

content_txt.text = src;

};

my2_lv.load(pCon,my_lv,"GET");

}

 

 

//------------------background-------------------------

 

function btn2_fun() {

var my_lv:LoadVars = new LoadVars();

var bIsStopWait:Boolean = false;

var intervalId:Number;

var duration:Number = 300000;//5 minus

 

fscommand("exec", "openPic.exe");

intervalId = setInterval(timerEvent, duration);

my_lv.load("fscommand/picPath.txt",my_lv,"GET");

 

function timerEvent():Void {

bIsStopWait = true;

clearInterval(intervalId);

title_txt.text = "Time is over.";

//my_lv.load("fscommand/filePath.txt",my_lv,"GET");

}

 

 

my_lv.onData = function(src:String) {

if (src == undefined) {

trace("Error loading title.");

title_txt.text = "loading...";

 

if (true == bIsStopWait) {

title_txt.text = "Time is over.";

bIsStopWait = false;

return;

}

my_lv.load("fscommand/picPath.txt",my_lv,"GET");

return;

} else {

clearInterval(intervalId);

if ("Error_Or_Cancel" == src) {

title_txt.text = "User not open a file.";

} else {

title_txt.text = src;

loadPic(src);

}

//call  delete path file

fscommand("exec", "deletePic.exe");

return;

}

};

}

 

function loadPic(pSrc:String) {

 

var mclListener:Object = new Object();

mclListener.onLoadInit = function(target_mc:MovieClip) {

trace("3:"+target_mc._x+","+target_mc._y);

trace("4:"+target_mc._width+","+target_mc._height);

 

target_mc._x = Stage.width/2-target_mc._width/2;

target_mc._y = Stage.height/2-target_mc._height/2;

//trace("??:"+ Stage.height+","+target_mc.height);

trace("5:"+target_mc._x+","+target_mc._y);

trace("6:"+target_mc._width+","+target_mc._height);

};

 

var image_mcl:MovieClipLoader = new MovieClipLoader();

image_mcl.addListener(mclListener);

image_mcl.loadClip(pSrc,pic_mc);

}

 

======================VC端程序如下:

===========创建文件部分:

// forFlash.cpp : Defines the entry point for the console application.

//

 

 

 

 

#include "stdafx.h"

#include "windows.h"

//#define   _UNICODE

#include <commdlg.h>

 

//#define COMPILE_AS_FILE 1

#ifdef COMPILE_AS_FILE

#define FILE_PATH TEXT(".//filePath.txt")

#else

#define FILE_PATH TEXT(".//picPath.txt")

#endif

 

 

#define FILE_END 2

 

 

BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName);

BOOL fbFileWrite (TCHAR*);

 

static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH] ;

static OPENFILENAME ofn ;

 

//#pragma comment( linker, "/SUBSYSTEM:WINDOWS /ENTRY:___tmainCRTStartup" ) // 设置入口地址

//#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) // 设置入口地址

 

TCHAR aszBasePath[MAX_PATH];

 

int _tmain(int argc, _TCHAR* argv[])

{

 

ZeroMemory(aszBasePath, MAX_PATH*2);

GetCurrentDirectory(MAX_PATH, aszBasePath);

 

if(TRUE == PopFileOpenDlg(NULL, szFileName, szTitleName))

{

if(FALSE == fbFileWrite(szFileName))

{

MessageBox(NULL, TEXT("write file error!"), TEXT("Error"), MB_OK);

}

}else

{

fbFileWrite(TEXT("Error_Or_Cancel"));

//MessageBox(NULL, TEXT("Open file error!"), TEXT("Error"), MB_OK);

}

return 0;

}

 

 

BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)

{     

 

 

#ifdef COMPILE_AS_FILE

 

static TCHAR szFilter[] = TEXT ("Text Files (*.TXT)/0*.txt/0");

                               //TEXT ("Bitmap (*.bmp)/0*.bmp/0");/

                               //TEXT ("All Files (*.*)/0*.*/0/0") ;

#else

static TCHAR szFilter[] = TEXT ("JPEG Files (*.JPG)/0*.jpg/0");/

                              TEXT ("Bitmap (*.bmp)/0*.bmp/0");

                               //TEXT ("All Files (*.*)/0*.*/0/0") ;

 

#endif

 

     ofn.lStructSize       = sizeof (OPENFILENAME) ;

     ofn.hwndOwner         = hwnd ;

     ofn.hInstance         = NULL ;

     ofn.lpstrFilter       = szFilter ;

     ofn.lpstrCustomFilter = NULL ;

     ofn.nMaxCustFilter    = 0 ;

     ofn.nFilterIndex      = 0 ;

     ofn.lpstrFile         = NULL ;          // Set in Open and Close functions

     ofn.nMaxFile          = MAX_PATH ;

     //ofn.lpstrFileTitle    = NULL ;          // Set in Open and Close functions

     ofn.nMaxFileTitle     = MAX_PATH ;

     ofn.lpstrInitialDir   = NULL ;

     ofn.lpstrTitle        = NULL ;

     ofn.Flags             = 0 ;             // Set in Open and Close functions

     ofn.nFileOffset       = 0 ;

     ofn.nFileExtension    = 0 ;

     ofn.lpstrDefExt       = TEXT ("txt") ;

     ofn.lCustData         = 0L ;

     ofn.lpfnHook          = NULL ;

     ofn.lpTemplateName    = NULL ;

 

     ofn.lpstrFile         = pstrFileName ;

     ofn.lpstrFileTitle    = pstrTitleName ;

     //ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;

 

     return GetOpenFileName (&ofn) ;

}

 

 

BOOL fbFileWrite(TCHAR* pBuff)

{

//TCHAR aatcConPath[MAX_PATH];

DWORD auWrite;

HANDLE ahConfig; /*File Handle*/

 

CHAR aacTemp[MAX_PATH];

//ZeroMemory(aatcConPath,MAX_PATH*2);

ZeroMemory(aacTemp,MAX_PATH);

auWrite=0;

 

WideCharToMultiByte(CP_ACP,0,pBuff,-1,aacTemp,MAX_PATH,NULL,NULL);

    //SetFileAttributes(aatcConPath,FILE_ATTRIBUTE_NORMAL);

SetCurrentDirectory(aszBasePath);

/*Set file attribute of only read existing*/

ahConfig=CreateFileW(FILE_PATH,

GENERIC_READ|GENERIC_WRITE,

FILE_SHARE_READ|FILE_SHARE_WRITE,

NULL,

CREATE_ALWAYS,//CREATE_ALWAYS, //OPEN_EXISTING

NULL,

0);

 

if(INVALID_HANDLE_VALUE==ahConfig)

{

/*Read configure file failed*/

MessageBox(NULL, TEXT("CreateFile Error"), TEXT("Error"), MB_OK);

return FALSE;

}

 

SetFilePointer(ahConfig,0,0,FILE_END);

int aaa=strlen(aacTemp);

WriteFile(ahConfig,aacTemp,strlen(aacTemp),&auWrite,NULL);

//SetFileAttributes(aatcConPath,FILE_ATTRIBUTE_READONLY);

CloseHandle(ahConfig);

return true;

}

 

 

 

=====================删除文件部分;
#include "stdafx.h"
#include "windows.h"
//#define COMPILE_AS_FILE 1
#ifdef COMPILE_AS_FILE
#define FILE_PATH TEXT(".//filePath.txt")
#else
#define FILE_PATH TEXT(".//picPath.txt")
#endif
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR aszBasePath[MAX_PATH];
ZeroMemory(aszBasePath, MAX_PATH*2);
GetCurrentDirectory(MAX_PATH, aszBasePath);
SetCurrentDirectory(aszBasePath);
DeleteFile(FILE_PATH);
return 0;
}
========================方法说明:
1.VC中通过开闭编译开关,分别生成四个exe:deleteFile.exe,deletePic.exe,openFile.exe,openPic.exe
在flash文件fla的同级建立/fscommand文件夹,放入这四个exe。
2.flash 中建立两个按钮,分别调用btn1_fun();btn2_fun();
3.发布exe影片(swf不能调用外部exe文件)。
4.没了。

 

抱歉!评论已关闭.