var Filter = "Image Files |*.png||"; var OPENFILENAME = Interop.Allocate(88); OPENFILENAME.WriteDWORD(0, OPENFILENAME.Size); OPENFILENAME.WriteDWORD(4, wnd.Handle); OPENFILENAME.WriteDWORD(8, 0); //hInstance OPENFILENAME.WriteDWORD(12, WriteMultiStringW(Interop.Allocate(Filter.length *2 +2), Filter).DataPtr); //lpstrFilter OPENFILENAME.WriteDWORD(16, 0); //lpstrCustomFilter OPENFILENAME.WriteDWORD(20, 0); //nMaxCustFilter OPENFILENAME.WriteDWORD(24, 1); //nFilterIndex var File = Interop.Allocate((255 +1) *2); //lpstrFile OPENFILENAME.WriteDWORD(28,File.DataPtr ); //lpstrFile OPENFILENAME.WriteDWORD(32,255 ); //nMaxFile OPENFILENAME.WriteDWORD(36, 0); //lpstrFileTitle OPENFILENAME.WriteDWORD(40, 0); //nMaxFileTitle OPENFILENAME.WriteDWORD(44, 0); //lpstrInitialDir var title = "Open Default display picture"; var Title = Interop.Allocate((title.length +1) *2); OPENFILENAME.WriteDWORD(48, Title.DataPtr); //lpstrTitle OPENFILENAME.WriteDWORD(52, OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST); //Flags OPENFILENAME.WriteWORD(56, 0); // nFileOffset OPENFILENAME.WriteWORD(56, 0); // nFileOffset OPENFILENAME.WriteWORD(58, 0); // nFileExtension OPENFILENAME.WriteDWORD(60, 0); // lpstrDefExt OPENFILENAME.WriteDWORD(64, 0); // lCustData OPENFILENAME.WriteDWORD(68, 0); // lpfnHook OPENFILENAME.WriteDWORD(72, 0); // lpTemplateName OPENFILENAME.WriteDWORD(76, 0); // pvReserved OPENFILENAME.WriteDWORD(80, 0); // dwReserved OPENFILENAME.WriteDWORD(84, 0); // FlagsEx Interop.Call("Comdlg32", "GetOpenFileNameW", OPENFILENAME) var ret = File.ReadString(0); if(ret){ wnd.SetControlText('albumDefaultCover', ret); wnd.ImageElmt_SetImageFile("preview", "\\" + ret); }