本来想用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;
}