[HELP] Browsing to save a file |
Author: |
Message: |
SmokingCookie
Senior Member
Posts: 815 Reputation: 15
30 / /
Joined: Jul 2007
|
O.P. [HELP] Browsing to save a file
Hi,
I want to save a file, using Windows' "Save File"-dialog and return the selected path, filename and extension, but I have no idea how to.. The MSDN descriptions don't make any sense to me..
Could anybody please help me?
Thanks in advance..
This post was edited on 05-20-2008 at 03:04 PM by SmokingCookie.
|
|
05-20-2008 02:56 PM |
|
|
Matti
Elite Member
Script Developer and Helper
Posts: 1646 Reputation: 39
32 / /
Joined: Apr 2004
|
RE: [HELP] Browsing to save a file
Have a look at matty's reply to Browse For File.
You'll probably need to modify some things, as I don't think you want the dialog to open at script start-up for example, but I think you'll be able to figure that out. Also, because that code was written for an Open File dialog, you'll have to make some modifications to get a Save File dialog, for example you'll have to call GetSaveFileName instead of GetOpenFileName. You'll also have to change the flags in the structure, as some flags only work with Open File dialogs and others are interesting to use for a Save File dialog.
Experiment with it. It's the only way to actually learn how to do it.
|
|
05-20-2008 03:48 PM |
|
|
SmokingCookie
Senior Member
Posts: 815 Reputation: 15
30 / /
Joined: Jul 2007
|
O.P. RE: [HELP] Browsing to save a file
Well, thank you
I have taken a quick look and don't really understand it (because it's a quick look).. I'll take a good hard look at it later this evening
Again thank you for the quick reply and the information
EDIT::
I have inserted the code and changed everything with "Open" to "Save", but it won't work.. It returns a 0 as path...
This post was edited on 05-20-2008 at 04:39 PM by SmokingCookie.
|
|
05-20-2008 04:04 PM |
|
|
matty
Scripting Guru
Posts: 8336 Reputation: 109
39 / /
Joined: Dec 2002
Status: Away
|
RE: [HELP] Browsing to save a file
Do some research just editing code isn't going to help you learn.
Post your code so we can give you an idea where you went wrong.
|
|
05-20-2008 07:41 PM |
|
|
SmokingCookie
Senior Member
Posts: 815 Reputation: 15
30 / /
Joined: Jul 2007
|
O.P. RE: [HELP] Browsing to save a file
I don't understand those flags etc., but here's the code anyway:
code: function BrowseFile(filter,title,file) { // these ARE specified
var SaveFileName = Interop.Allocate(88);
var filter;
var s_filter;
var file;
var s_file;
var s_title;
var ret;
var tdata;
with(SaveFileName) {
WriteDWORD(0,Size); // lStructSize
WriteDWORD(4,0); // hwndOwner
WriteDWORD(8,0); // hInstance
filter;
s_filter = Interop.Allocate(2 * (filter.length + 1));
WriteMultiStringW(s_filter, filter);
WriteDWORD(12,s_filter.DataPtr); // lpstrFilter
WriteDWORD(16,0); // lpstrCustomFilter
WriteDWORD(20,0); // nMaxCustomFilter
WriteDWORD(24,1); // nFilterIndex
file + Space(256);
s_file = Interop.Allocate(2 * (file.length + 1));
s_file.WriteString(0,file);
WriteDWORD(28,s_file.DataPtr); // lpstrFile
WriteDWORD(32,file.length); // nMaxFile
WriteDWORD(36,0); // lpstrFileTitle
WriteDWORD(40,0); // nMaxFileTitle
WriteDWORD(44,0); // lpstrInitialDir
title;
s_title = Interop.Allocate(2 * (title.length + 1));
s_title.WriteString(0,title);
WriteDWORD(48,s_title.DataPtr); // lpstrTitle
WriteDWORD(52,OFN_ENABLESIZING | OFN_EXPLORER | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_PATHMUSTEXIST/* | OFN_FILEMUSTEXIST*/); // flags
WriteWORD(56,0); // nFileOffset
WriteWORD(58,0); // nFileExtension
WriteDWORD(60,0); // lpstrDefExt
WriteDWORD(64,0); // lCustData
WriteDWORD(68,0); // lpfnHook
WriteDWORD(72,0); // lpTemplateName
WriteDWORD(76,0); // pvReserved
WriteDWORD(80,0); // dwReserved
WriteDWORD(84,0); // FlagsEx
}
with(SaveFileName) {
Ret = Interop.Call("comdlg32.dll","GetSaveFileNameW",SaveFileName);
if(ret == 0) {
return "__none";
} else {
return Ret;
}
}
}
function WriteMultiStringW(datablock,string) {
var pos = 0;
datablock.WriteString(0,string);
pos = string.indexOf("|",pos);
while(pos != -1) {
datablock.WriteWORD(2 * pos, 0);
pos = string.indexOf("|",pos + 1);
}
}
function Space(number) {
var i;
var s = "";
for(i = 0; i < number; i++) {
s += " ";
}
return s;
}
|
|
05-20-2008 07:44 PM |
|
|
roflmao456
Skinning Contest Winner
Posts: 955 Reputation: 24
30 / /
Joined: Nov 2006
Status: Away
|
RE: [HELP] Browsing to save a file
maybe this could work (xp only?):
code: function SaveFile(){
var SFD = new ActiveXObject("SAFRCFileDlg.FileSave");
SFD.FileName = "*.*";
SFD.FileType = "*.*";
if(SFD.OpenFileSaveDlg()){
return SFD.FileName;
}
return false;
}
run this JS script in wscript.exe. since it uses the jscript scripting engine, it works
This post was edited on 05-20-2008 at 08:03 PM by roflmao456.
[quote]
Ultimatess6: What a noob mod
|
|
05-20-2008 07:52 PM |
|
|
Spunky
Former Super Mod
Posts: 3658 Reputation: 61
36 / /
Joined: Aug 2006
|
RE: [HELP] Browsing to save a file
quote: Originally posted by roflmao456
maybe this could work (xp only?):
code: function SaveFile(){
var SFD = new ActiveXObject("SAFRCFileDlg.FileSave");
SFD.FileName = "*.*";
SFD.FileType = "*.*";
if(SFD.OpenFileSaveDlg()){
return SFD.FileName;
}
return false;
}
run this JS script in wscript.exe. since it uses the jscript scripting engine, it works
Doesn't work on vista in WScript here
<Eljay> "Problems encountered: shit blew up"
|
|
05-20-2008 09:43 PM |
|
|
matty
Scripting Guru
Posts: 8336 Reputation: 109
39 / /
Joined: Dec 2002
Status: Away
|
RE: [HELP] Browsing to save a file
quote: Originally posted by SmokingCookie
I don't understand those flags etc., but here's the code anyway:
Looking at the MSDN documentation for a structure is always a wise idea: http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx
code: function BrowseFile(filter, title, file) {
var _SAVEFILENAME = Interop.Allocate(88);
var s_filter;
var s_file;
var s_title;
with(_SAVEFILENAME) {
/*Define the size of the structure; this is done because there are multiple sizes of the structure */
WriteDWORD(0, Size);
/*Use this portion to force the Dialog to show ontop of another window */
WriteDWORD(4, 0);
/*Define the file filter */
s_filter = Interop.Allocate(2 * filter.length + 1);
WriteMultiStringW(s_filter, filter);
WriteDWORD(12, s_filter.DataPtr);
/* Set the current selected filter as the first filter in the list */
WriteDWORD(24, 1);
/* Allocate space to hold the filename */
s_file = Interop.Allocate(512);
s_file.WriteString(0, file);
WriteDWORD(28, s_file.DataPtr);
/* Set the maximum size of the file path */
WriteDWORD(32, 512);
/* Set the title of the dialog */
s_title = Interop.Allocate(2 * title.length + 1);
s_title.WriteString(0, title);
WriteDWORD(48, s_title.DataPtr);
/* Set the flags for the dialog style */
WriteDWORD(52, OFN_ENABLESIZING | OFN_EXPLORER | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_PATHMUSTEXIST);
}
/* Call the function */
var ret = Interop.Call('comdlg32', 'GetSaveFileNameW', _SAVEFILENAME);
//return
// if ret = 0
// since ret == 0 is true return '__none'
// since ret != 0 then return the filename
return ret === 0 ? '__none' : s_file.ReadString(0);
}
This is untested code. You need to learn to start doing things yourself.
This post was edited on 05-25-2008 at 04:30 PM by matty.
|
|
05-21-2008 12:29 AM |
|
|
|
|