private async Task OnBrowseButtonClickedAsync() { await NuGetUIThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); const int MaxDirectoryLength = 1000; //const int BIF_RETURNONLYFSDIRS = 0x00000001; // For finding a folder to start document searching. const int BIF_BROWSEINCLUDEURLS = 0x00000080; // Allow URLs to be displayed or entered. var uiShell = await _asyncServiceProvider.GetServiceAsync <SVsUIShell, IVsUIShell2>(); Assumes.Present(uiShell); var rgch = new char[MaxDirectoryLength + 1]; // allocate a buffer in unmanaged memory for file name (string) var bufferPtr = Marshal.AllocCoTaskMem((rgch.Length + 1) * 2); // copy initial path to bufferPtr Marshal.Copy(rgch, 0, bufferPtr, rgch.Length); var pBrowse = new VSBROWSEINFOW[1]; pBrowse[0] = new VSBROWSEINFOW { lStructSize = (uint)Marshal.SizeOf(pBrowse[0]), dwFlags = BIF_BROWSEINCLUDEURLS, pwzDlgTitle = Resources.BrowseFolderDialogDescription, nMaxDirName = MaxDirectoryLength, hwndOwner = Handle, pwzDirName = bufferPtr, pwzInitialDir = DetermineInitialDirectory() }; var browseInfo = new VSNSEBROWSEINFOW[1] { new VSNSEBROWSEINFOW() }; var ret = uiShell.GetDirectoryViaBrowseDlgEx(pBrowse, "", Resources.BrowseFolderDialogSelectButton, "", browseInfo); if (ret == VSConstants.S_OK) { var pathPtr = pBrowse[0].pwzDirName; var path = Marshal.PtrToStringAuto(pathPtr); NewPackageSource.Text = path; // if the package name text box is empty, we fill it with the selected folder's name if (string.IsNullOrEmpty(NewPackageName.Text)) { NewPackageName.Text = Path.GetFileName(path); } } }
private void OnBrowseButtonClicked(object sender, EventArgs e) { const int MaxDirectoryLength = 1000; //const int BIF_RETURNONLYFSDIRS = 0x00000001; // For finding a folder to start document searching. const int BIF_BROWSEINCLUDEURLS = 0x00000080; // Allow URLs to be displayed or entered. var uiShell = (IVsUIShell2)_serviceProvider.GetService(typeof(SVsUIShell)); char[] rgch = new char[MaxDirectoryLength + 1]; // allocate a buffer in unmanaged memory for file name (string) IntPtr bufferPtr = Marshal.AllocCoTaskMem((rgch.Length + 1) * 2); // copy initial path to bufferPtr Marshal.Copy(rgch, 0, bufferPtr, rgch.Length); VSBROWSEINFOW[] pBrowse = new VSBROWSEINFOW[1]; pBrowse[0] = new VSBROWSEINFOW() { lStructSize = (uint)Marshal.SizeOf(pBrowse[0]), dwFlags = (uint)(BIF_BROWSEINCLUDEURLS), pwzDlgTitle = Resources.BrowseFolderDialogDescription, nMaxDirName = (uint)MaxDirectoryLength, hwndOwner = this.Handle, pwzDirName = bufferPtr, pwzInitialDir = DetermineInitialDirectory() }; var browseInfo = new VSNSEBROWSEINFOW[1] { new VSNSEBROWSEINFOW() }; int ret = uiShell.GetDirectoryViaBrowseDlgEx(pBrowse, "", Resources.BrowseFolderDialogSelectButton, "", browseInfo); if (ret == VSConstants.S_OK) { var pathPtr = pBrowse[0].pwzDirName; var path = Marshal.PtrToStringAuto(pathPtr); NewPackageSource.Text = path; // if the package name text box is empty, we fill it with the selected folder's name if (String.IsNullOrEmpty(NewPackageName.Text)) { NewPackageName.Text = Path.GetFileName(path); } } }
private void OnBrowseButtonClicked(object sender, EventArgs e) { const int MaxDirectoryLength = 1000; //const int BIF_RETURNONLYFSDIRS = 0x00000001; // For finding a folder to start document searching. const int BIF_BROWSEINCLUDEURLS = 0x00000080; // Allow URLs to be displayed or entered. var uiShell = (IVsUIShell2)_serviceProvider.GetService(typeof(SVsUIShell)); char[] rgch = new char[MaxDirectoryLength + 1]; // allocate a buffer in unmanaged memory for file name (string) IntPtr bufferPtr = Marshal.AllocCoTaskMem((rgch.Length + 1) * 2); // copy initial path to bufferPtr Marshal.Copy(rgch, 0, bufferPtr, rgch.Length); VSBROWSEINFOW[] pBrowse = new VSBROWSEINFOW[1]; pBrowse[0] = new VSBROWSEINFOW() { lStructSize = (uint)Marshal.SizeOf(pBrowse[0]), dwFlags = (uint)(BIF_BROWSEINCLUDEURLS), pwzDlgTitle = Resources.BrowseFolderDialogDescription, nMaxDirName = (uint)MaxDirectoryLength, hwndOwner = this.Handle, pwzDirName = bufferPtr, pwzInitialDir = DetermineInitialDirectory() }; var browseInfo = new VSNSEBROWSEINFOW[1] { new VSNSEBROWSEINFOW() }; int ret = uiShell.GetDirectoryViaBrowseDlgEx(pBrowse, "", Resources.BrowseFolderDialogSelectButton, "", browseInfo); if (ret == VSConstants.S_OK) { var pathPtr = pBrowse[0].pwzDirName; var path = Marshal.PtrToStringAuto(pathPtr); NewPackageSource.Text = path; // if the package name text box is empty, we fill it with the selected folder's name if (String.IsNullOrEmpty(NewPackageName.Text)) { NewPackageName.Text = Path.GetFileName(path); } } }