Как я могу получить список открытых папок, перечислить его и свернуть каждую папку программно?
Иногда некоторые открытые папки делают фокус с инструмента при переходе из одной формы в приложение в другую. Предотвращение этого имеет высокий приоритет для нашего клиента. Клиенты - люди с ослабленным зрением, поэтому они получают доступ к машине только через устройства чтения с экрана. Минимизация других окон (папок) вовсе не проблема, на самом деле это требование.
Я пробовал это:
foreach (Process p in Process.GetProcessesByName("explorer"))
{
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
}
Как и ожидалось, это не принесло пользы.
Обновление
Из ответов здесь я пробовал это:
delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam);
static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processID)
{
List<IntPtr> handles = new List<IntPtr>();
EnumThreadDelegate addWindowHandle = delegate(IntPtr hWnd, IntPtr param)
{
handles.Add(hWnd);
return true;
};
foreach (ProcessThread thread in Process.GetProcessById(processID).Threads)
EnumThreadWindows(thread.Id, addWindowHandle, IntPtr.Zero);
return handles;
}
const int SW_MINIMIZED = 6;
[DllImport("user32.dll")]
static extern int ShowWindow(IntPtr hWnd, int nCmdShow);
private void button1_Click(object sender, EventArgs e)
{
foreach (IntPtr handle in EnumerateProcessWindowHandles(Process.GetProcessesByName("explorer")[0].Id))
ShowWindow(handle, SW_MINIMIZED);
}
Это создает много невидимых окон для браузеров, которые будут неожиданно перечислены в taksbar из любого места. Я немного разбираюсь в Windows API, поэтому сам код действительно поможет.