Свернуть папку

Я хочу свернуть окно с помощью C#

Пример: я открыл этот путь E:\ с помощью

process.start(E:\)

И я хочу минимизировать этот путь на определенном событии.

Как я могу сделать это возможным?

5 ответов

Следующий пример кода консольного приложения минимизирует все представления проводника оболочки, которые открываются на E:\:

class Program
{
    static void Main(string[] args)
    {
        // add a reference to "Microsoft Shell Controls and Automation" COM component
        // also add a 'using Shell32;'
        Shell shell = new Shell();
        dynamic windows = shell.Windows(); // this is a ShellWindows object
        foreach (dynamic window in windows)
        {
            // window is an WebBrowser object
            Uri uri = new Uri((string)window.LocationURL);
            if (uri.LocalPath == @"E:\")
            {
                IntPtr hwnd = (IntPtr)window.HWND; // WebBrowser is also an IWebBrowser2 object
                MinimizeWindow(hwnd);
            }
        }
    }

    static void MinimizeWindow(IntPtr handle)
    {
        const int SW_MINIMIZE = 6;
        ShowWindow(handle, SW_MINIMIZE);
    }

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}

Он использует объекты оболочки для сценариев. Обратите внимание на использование динамического ключевого слова, которое здесь обязательно, потому что нет классной библиотеки типов, и, следовательно, нет также и intellisense.

Shell32.Shell objShell = new Shell32.Shell(); objShell.MinimizeAll(); это поможет вам свернуть все окна Не только все папки (что-то вроде windows + M!!!

Вы можете использовать файл конфигурации или переменную

Это возможное решение, и оно минимизирует только открытое окно:

private int explorerWindowNumber;
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MINIMIZE = 0xF020;

[DllImport("user32.dll", SetLastError = true)]
public static extern int GetForegroundWindow();

[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

public void button1_Click(object sender, EventArgs e)
{
    //Start my window
    StartMyExplorer();
}

private void StartMyExplorer()
{
    Process.Start("D:\\");
    Thread.Sleep(1000);
    //Get the window id (int)
    explorerWindowNumber = GetForegroundWindow();
}

private void button2_Click(object sender, EventArgs e)
{
    //Minimize the window i created
    SendMessage(explorerWindowNumber, WM_SYSCOMMAND, SC_MINIMIZE, 0);
}

Ваш вопрос не очень понятен. Если вы используете элемент управления TreeView, смотрите MSDN Treeview class. Затем вы можете: Развернуть или Свернуть предметы по желанию.

Другие вопросы по тегам