/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace AuroraUIComponent.Util.WindowAPI { internal class WindowUtil { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool IsIconic(IntPtr hWnd); [DllImport("user32.dll")] private static extern IntPtr ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_RESTORE = 9; public static void OpenOrActivateFolder(string folderPath) { Process[] processes = Process.GetProcessesByName("explorer"); bool folderOpened = false; foreach (var process in processes) { if (process.MainWindowTitle.Contains(folderPath)) { folderOpened = true; } else { var dirName = folderPath.Split('\\').LastOrDefault(); if (!string.IsNullOrEmpty(dirName) && process.MainWindowTitle.Contains(dirName)) { folderOpened = true; } } if (folderOpened) { // 이미 열려 있는 경우 if (IsIconic(process.MainWindowHandle)) { ShowWindow(process.MainWindowHandle, SW_RESTORE); // 창 복원 } SetForegroundWindow(process.MainWindowHandle); // 창을 맨 위로 folderOpened = true; break; } } if (!folderOpened) { // 폴더가 열려 있지 않은 경우 새로 엽니다. Process.Start("explorer.exe", folderPath); } } } }