Sh4wn 
New Member 
 
  
 
Posts: 14 
Joined: Jul 2006 
 | 
| 
O.P.  Open File Dialog
 How can I create a 'Open file..' Dialog, so a user can select a file, and my script kan get the full path. 
 
I'm sure it can be done with Interop, but which DLL do I have to use, and which function? 
 
And how can I get the full path then? 
 
 
 |   
 | 
Eljay 
Elite Member 
     
  
  
:O
  
Posts: 2945 Reputation: 77 
– /   / – 
Joined: May 2004 
 | 
 RE: Open File Dialog
oops   
until its moved ill post the important bit here   
quote: Originally posted by Matty 
This is taken from Choli's Translator, give all credits too him. 
 
code:     var OFN_ENABLESIZING = 0x800000; 
    var OFN_EXPLORER = 0x80000; 
    var OFN_FILEMUSTEXIST = 0x1000; 
    var OFN_HIDEREADONLY = 0x4; 
    var OFN_LONGNAMES = 0x200000; 
    var OFN_PATHMUSTEXIST = 0x800; 
     
function OnEvent_Initialize(MessengerStart) 
{ 
    var OpenFileName = Interop.Allocate(88); 
    var filter; 
    var s_filter; 
    var file; 
    var s_file; 
    var title; 
    var s_title; 
    var ret; 
    var tdata; 
 
     with (OpenFileName) { 
        WriteDWORD(0, Size); // lStructSize 
        WriteDWORD(4, 0); // hwndOwner 
        WriteDWORD(8, 0); // hInstance 
        filter = "Translation files (Lng_*.ini)|Lng_*.ini|All files (*.*)|*.*||"; 
        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 = "Lng_*.ini" + 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 = "Select original file"; 
        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 OpenFileName 
    ret = Interop.Call("comdlg32.dll", "GetOpenFileNameW", OpenFileName); 
    if (ret == 0) { 
        return; 
    } 
} 
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; 
}
  
  
edit: quote: Originally posted by andrey 
there's an example in this thread 
dialog boxes 
 
(is the quote actually taken from the thread Eljay linked to ?)
  
yes it is    
 This post was edited on 07-15-2006 at 01:34 PM by Eljay.
 |   
 |