如何获取打开的文件夹列表,枚举并以编程方式最小化每个文件夹?
有时,当从应用程序中的一个表单跳转到另一个表单时,某些打开的文件夹会从工具中窃取焦点。防止这种情况对我们的客户来说是重中之重。客户是视障人士,因此他们只能通过屏幕阅读器访问机器。最小化其他窗口(文件夹)根本不是问题,实际上是一个要求。
我试过这个:
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);
}
这会创建大量不可见的资源管理器窗口,这些窗口会突然出现在任务栏中。我在处理 Windows API 方面有点菜鸟,所以代码本身实际上会有所帮助。