Ejemplo n.º 1
0
        public string ShowDialog()
        {
            var filePtr = Marshal.AllocHGlobal(1024);
            var fdatas  = new byte[1024];

            if (!string.IsNullOrEmpty(this.File))
            {
                Encoding.Unicode.GetBytes(this.File).CopyTo(fdatas, 0);
            }
            Marshal.Copy(fdatas, 0, filePtr, fdatas.Length);
            NativeMethods.OPENFILENAMEW ofn = new NativeMethods.OPENFILENAMEW();
            ofn.lStructSize = Marshal.SizeOf <NativeMethods.OPENFILENAMEW>();
            ofn.lpstrTitle  = this.Title;
            ofn.lpstrFilter = Filter.Replace('(', '\0').Replace(')', '\0').Replace("|", "");
            ofn.hwndOwner   = this.OwnerHandle;
            ofn.lpstrFile   = filePtr;
            ofn.nMaxFile    = 1024;
            var r = NativeMethods.GetSaveFileNameW(ref ofn);

            if (r)
            {
                var datas = new byte[1024];
                Marshal.Copy(ofn.lpstrFile, datas, 0, datas.Length);
                var files  = Encoding.Unicode.GetString(datas);
                var tmps   = files.Split('\0');
                var result = tmps[0];
                Marshal.FreeHGlobal(filePtr);
                return(result);
            }
            Marshal.FreeHGlobal(filePtr);
            return(null);
        }
Ejemplo n.º 2
0
        public string[] ShowDialog()
        {
            var flag    = AllowMultiSelect ? 0x00000200 | 0x00800000 | 0x00080000 : 0;
            var filePtr = Marshal.AllocHGlobal(1024);
            var fdatas  = new byte[1024];

            Marshal.Copy(fdatas, 0, filePtr, fdatas.Length);
            NativeMethods.OPENFILENAMEW ofn = new NativeMethods.OPENFILENAMEW();
            ofn.lStructSize = Marshal.SizeOf <NativeMethods.OPENFILENAMEW>();
            ofn.lpstrTitle  = this.Title;
            ofn.lpstrFilter = Filter.Replace('(', '\0').Replace(')', '\0').Replace("|", "");
            ofn.hwndOwner   = this.OwnerHandle;
            ofn.lpstrFile   = filePtr;
            ofn.Flags       = flag;
            ofn.nMaxFile    = 1024;
            var r = NativeMethods.GetOpenFileNameW(ref ofn);

            if (r)
            {
                var datas = new byte[1024];
                Marshal.Copy(ofn.lpstrFile, datas, 0, datas.Length);
                var files = Encoding.Unicode.GetString(datas);
                var tmps  = files.Split('\0');
                if (this.AllowMultiSelect)
                {
                    List <string> resultList = new List <string>();
                    var           dir        = tmps[0];
                    for (var i = 1; i < tmps.Length; i++)
                    {
                        if (tmps[i].Length == 0)
                        {
                            if (i == 1)
                            {
                                resultList.Add(dir);
                            }
                            break;
                        }
                        else
                        {
                            resultList.Add($"{dir}\\{tmps[i]}");
                        }
                    }
                    Marshal.FreeHGlobal(filePtr);
                    return(resultList.ToArray());
                }
                else
                {
                    var result = new string[1] {
                        tmps[0]
                    };
                    Marshal.FreeHGlobal(filePtr);
                    return(result);
                }
            }
            Marshal.FreeHGlobal(filePtr);
            return(new string[0]);
        }