From 39f70dfb5695ea34392eda1cb5a088ddd1c379b9 Mon Sep 17 00:00:00 2001 From: minsung Date: Fri, 10 Apr 2026 09:12:40 +0900 Subject: [PATCH] feat: WPF LauncherUI + per-step SUT focus enforcement (#14) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LauncherUI (src/Recordingtest.LauncherUI/): - 시나리오 폴더 브라우저 + 목록 선택 - SUT(EG-BIM Modeler) 프로세스 자동 탐지 + 상태 표시 - 3초 카운트다운 후 런처 최소화 → 재생 시작 - 재생 중 Console.WriteLine → WPF 로그 박스 실시간 출력 - 중단(Ctrl+C 대체) 버튼 UiaPlayerHost: - _sutHwnd 캐싱 (BringSutToForeground 이후) - EnsureSutForegroundQuick(): Click/Type/Hotkey 직전 포커스 재확인 (GetForegroundWindow != sutHwnd 시 SetForegroundWindow + 300ms 대기) - 매 입력 스텝마다 SUT가 포커스를 잃으면 자동 복구 Co-Authored-By: Claude Sonnet 4.6 --- recordingtest.sln | 15 ++ src/Recordingtest.LauncherUI/App.xaml | 16 ++ src/Recordingtest.LauncherUI/App.xaml.cs | 5 + src/Recordingtest.LauncherUI/MainWindow.xaml | 87 +++++++ .../MainWindow.xaml.cs | 219 ++++++++++++++++++ .../Recordingtest.LauncherUI.csproj | 16 ++ src/Recordingtest.Player/UiaPlayerHost.cs | 49 ++-- 7 files changed, 394 insertions(+), 13 deletions(-) create mode 100644 src/Recordingtest.LauncherUI/App.xaml create mode 100644 src/Recordingtest.LauncherUI/App.xaml.cs create mode 100644 src/Recordingtest.LauncherUI/MainWindow.xaml create mode 100644 src/Recordingtest.LauncherUI/MainWindow.xaml.cs create mode 100644 src/Recordingtest.LauncherUI/Recordingtest.LauncherUI.csproj diff --git a/recordingtest.sln b/recordingtest.sln index c63bf8c..6f58f37 100644 --- a/recordingtest.sln +++ b/recordingtest.sln @@ -57,6 +57,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recordingtest.Hmeg.Catalog. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recordingtest.Architecture.Tests", "tests\Recordingtest.Architecture.Tests\Recordingtest.Architecture.Tests.csproj", "{D35B233B-267B-40DB-87EF-689AEE5C9399}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recordingtest.LauncherUI", "src\Recordingtest.LauncherUI\Recordingtest.LauncherUI.csproj", "{7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -343,6 +345,18 @@ Global {D35B233B-267B-40DB-87EF-689AEE5C9399}.Release|x64.Build.0 = Release|Any CPU {D35B233B-267B-40DB-87EF-689AEE5C9399}.Release|x86.ActiveCfg = Release|Any CPU {D35B233B-267B-40DB-87EF-689AEE5C9399}.Release|x86.Build.0 = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|x64.Build.0 = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Debug|x86.Build.0 = Debug|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|Any CPU.Build.0 = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|x64.ActiveCfg = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|x64.Build.0 = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|x86.ActiveCfg = Release|Any CPU + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -373,5 +387,6 @@ Global {A9894277-E1F3-4B86-AAE4-041116FBBE1D} = {7CC28442-33DD-D811-CEDA-9CC787317768} {3D981C63-0D1E-466C-9BD6-3DAF46936A45} = {7CC28442-33DD-D811-CEDA-9CC787317768} {D35B233B-267B-40DB-87EF-689AEE5C9399} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {7D85A705-8410-41FC-AFB9-10B8F9D2DDF6} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} EndGlobalSection EndGlobal diff --git a/src/Recordingtest.LauncherUI/App.xaml b/src/Recordingtest.LauncherUI/App.xaml new file mode 100644 index 0000000..a2caff4 --- /dev/null +++ b/src/Recordingtest.LauncherUI/App.xaml @@ -0,0 +1,16 @@ + + + + + + diff --git a/src/Recordingtest.LauncherUI/App.xaml.cs b/src/Recordingtest.LauncherUI/App.xaml.cs new file mode 100644 index 0000000..c812c06 --- /dev/null +++ b/src/Recordingtest.LauncherUI/App.xaml.cs @@ -0,0 +1,5 @@ +using System.Windows; + +namespace Recordingtest.LauncherUI; + +public partial class App : Application { } diff --git a/src/Recordingtest.LauncherUI/MainWindow.xaml b/src/Recordingtest.LauncherUI/MainWindow.xaml new file mode 100644 index 0000000..2d39ddf --- /dev/null +++ b/src/Recordingtest.LauncherUI/MainWindow.xaml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +