1

I dont know if OpenFiledialog is the right control, but I want to open an already bookmarked filepath within my main form control. I have a program that implements this but I dont know how to go about it.

When the user clicks a button, the column on the left in the picture below will show the folder of the last opened file path. How to go about to create this. I already have the path to the folder I want to display, which controls should I use, any code will be highly appreciated sample

Basco
  • 87
  • 1
  • 1
  • 7

2 Answers2

0

You can do it with SetParent function. below is an example only for educational purposes!

using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            this.Size = new System.Drawing.Size(800, 600);
            this.TopMost = true;
            this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
            Func<bool> run = () =>
                Window.Find(hwnd =>
                {
                    var cn = Window.GetClassName(hwnd);
                    var res = (cn == "CabinetWClass");
                    if (res)
                    {
                        this.Controls.Clear();
                        Window.SetParent(hwnd, this.Handle);
                        Window.SetWindowPos(hwnd, new IntPtr(0), -8, -30, this.Width + 10, this.Height + 37, 0x0040);
                    }
                    return res;
                });

            new Button { Parent = this, Text = "Start" }
                .Click += (s, e) =>
                    {
                        if (run() == false)
                            MessageBox.Show("Open Explorer");
                    };
        }
    }

    public static class Window
    {
        public static bool Find(Func<IntPtr, bool> fn)
        {
            return EnumWindows((hwnd, lp) => !fn(hwnd), 0) == 0;
        }
        public static string GetClassName(IntPtr hwnd)
        {
            var sb = new StringBuilder(1024);
            GetClassName(hwnd, sb, sb.Capacity);
            return sb.ToString();
        }
        public static uint GetProcessId(IntPtr hwnd)     // {0:X8}
        {
            uint pid;
            GetWindowThreadProcessId(hwnd, out pid);
            return pid;
        }
        public static string GetText(IntPtr hwnd)
        {
            var sb = new StringBuilder(1024);
            GetWindowText(hwnd, sb, sb.Capacity);
            return sb.ToString();
        }

        delegate bool CallBackPtr(IntPtr hwnd, int lParam);

        [DllImport("user32.dll")]
        static extern int EnumWindows(CallBackPtr callPtr, int lPar);

        [DllImport("user32.dll")]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

        [DllImport("User32", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int W, int H, uint uFlags);
    }
}
Obama
  • 2,586
  • 2
  • 30
  • 49
0

if im understanding the question you want to open windows explorer at a certain path. its simple then, you use no control just do this:

Process.Start("Your path here");
string.Empty
  • 10,393
  • 4
  • 39
  • 67
  • I finally used Gong solutions and it worked perfectly http://gong-shell.sourceforge.net/tutorials/filedialog.php – Basco Apr 07 '13 at 11:14