Windows λ€μ€ λͺ¨λν° νκ²½μμ μ± μ€νκ³Ό μν¬μ€νμ΄μ€ μ°½ λ°°μΉλ₯Ό 볡μνλ κ²½λ μ νΈλ¦¬ν°
Monitor Launcherλ λ€μ€ λͺ¨λν° νκ²½μμ μμ νλ μ¬μ©μλ₯Ό μν Windows μ νΈλ¦¬ν°μ λλ€. νΉμ νλ‘κ·Έλ¨μ μνλ λͺ¨λν°μμ μνλ μ°½ μνλ‘ μ€νν μ μλλ‘ λμμ€λλ€.
- μ¬λ¬ λͺ¨λν°λ₯Ό μ¬μ©νμ§λ§, νλ‘κ·Έλ¨μ΄ νμ κΈ°λ³Έ λͺ¨λν°μμλ§ μ€νλλ λ¬Έμ
- νΉμ μμ μ© νλ‘κ·Έλ¨μ νμ νΉμ λͺ¨λν°μμ μ€ννκ³ μΆμ κ²½μ°
- κ²μ, κ°λ° λꡬ, λ―Έλμ΄ νλ μ΄μ΄ λ±μ κ°κ° λ€λ₯Έ λͺ¨λν°μ λ°°μΉνκ³ μΆμ λ
- νλ‘νμ μ μ₯νμ¬ μμ£Ό μ¬μ©νλ νλ‘κ·Έλ¨μ μν΄λ¦μΌλ‘ μ€ννκ³ μΆμ λ
- π₯οΈ μλ λͺ¨λν° κ°μ§: μ°κ²°λ λͺ¨λ λͺ¨λν°λ₯Ό μλμΌλ‘ κ°μ§νκ³ ν΄μλ μ 보 νμ
- π― μ νν μ°½ μμΉ μ μ΄: Win32 APIλ₯Ό νμ©ν κ°λ ₯ν μ°½ μμΉ μ μ΄
- β‘ κ²½λ λ° κ³ μ±λ₯: CPU μ¬μ©λ μ΅μ ν (0.5-3%), λ©λͺ¨λ¦¬ μ¬μ©λ 25-35MB
- πΎ νλ‘ν μ μ₯: μμ£Ό μ¬μ©νλ νλ‘κ·Έλ¨ μ€μ μ νλ‘νλ‘ μ μ₯νμ¬ λΉ λ₯Έ μ€ν
- π μ§μμ μΈ λͺ¨λν°λ§: νλ‘κ·Έλ¨μ΄ μ°½ μμΉλ₯Ό λ³κ²½ν΄λ μλμΌλ‘ μνλ λͺ¨λν°λ‘ μ¬λ°°μΉ
- π¨ μ§κ΄μ μΈ UI: κ°λ¨νκ³ κΉλν Windows Forms μΈν°νμ΄μ€
- π μμ€ν νΈλ μ΄ μ§μ: λ°±κ·ΈλΌμ΄λ μ€ν λ° νΈλ μ΄ μμ΄μ½μ ν΅ν λΉ λ₯Έ μ κ·Ό
- λͺ¨λν° κ°μ§ λ° μ ν: μ°κ²°λ λͺ¨λ λͺ¨λν°λ₯Ό μλ κ°μ§νκ³ μ νν μ μμ΅λλ€.
- νλ‘κ·Έλ¨ μ€ν μμΉ μ μ΄: μ€ν νμΌμ μ νν λͺ¨λν°μμ μ€νν μ μμ΅λλ€.
- νλ‘ν(μ¦κ²¨μ°ΎκΈ°) κΈ°λ₯: νλ‘κ·Έλ¨ κ²½λ‘, λͺ¨λν°, μ°½ μνλ₯Ό νλ‘νλ‘ μ μ₯νμ¬ μν΄λ¦μΌλ‘ μ€νν μ μμ΅λλ€.
- μν¬μ€νμ΄μ€ κΈ°λ₯: μ¬λ¬ μ± μ°½μ μμΉμ ν¬κΈ°λ₯Ό νλμ μν¬μ€νμ΄μ€λ‘ μ μ₯νκ³ λ³΅μν μ μμ΅λλ€.
- μ°½ μν μ μ΄: μ 체νλ©΄, μ°½λͺ¨λ, 볡μ μ΅μ μ μ§μν©λλ€.
- μμ€ν νΈλ μ΄ μ§μ: λ°±κ·ΈλΌμ΄λ μ€ν λ° νΈλ μ΄ μμ΄μ½μ ν΅ν λΉ λ₯Έ μ κ·Ό
- μλ μ°½ μμΉ λͺ¨λν°λ§: νλ‘κ·Έλ¨μ΄ μ°½ μμΉλ₯Ό λ³κ²½ν΄λ μλμΌλ‘ μνλ λͺ¨λν°λ‘ μ¬λ°°μΉ
- μ μ°ν μ€ν λμ μ§μ:
.exe,.lnk, URL/μ Έ μ€ν λμμ μ²λ¦¬ν μ μμ΅λλ€.
MonitorLauncher/
βββ MonitorLauncher.csproj # νλ‘μ νΈ νμΌ
βββ app.manifest # κ΄λ¦¬μ κΆν μꡬ μ€μ
βββ Program.cs # μ§μ
μ
βββ MainForm.cs # λ©μΈ UI λ° λ‘μ§
βββ AppLauncherService.cs # νλ‘κ·Έλ¨ μ€ν λ° μ°½ μ΄λ μ‘°μ
βββ WorkspaceRestoreService.cs # μν¬μ€νμ΄μ€ 볡μ λ° μ°½ λͺ¨μΌκΈ°
βββ WindowCaptureService.cs # νμ¬ μ΄λ € μλ μ°½ μΊ‘μ²
βββ LaunchRequest.cs # μ€ν μμ² λͺ¨λΈ
βββ LaunchResult.cs # μ€ν κ²°κ³Ό λͺ¨λΈ
βββ WorkspaceProfile.cs # μν¬μ€νμ΄μ€ μ μ₯/λ‘λ
βββ AppWindowProfile.cs # μν¬μ€νμ΄μ€ μ± μ°½ λͺ¨λΈ
βββ CapturedWindowInfo.cs # μΊ‘μ²λ μ°½ μ 보
βββ AppWindowState.cs # μ°½ μν enum
βββ Win32Api.cs # Win32 API λνΌ
βββ WindowController.cs # μ°½ μμΉ μ μ΄ λ‘μ§
βββ Profile.cs # νλ‘ν μ μ₯/λ‘λ
βββ Resources/ # μ± λ‘κ³ , μ± μμ΄μ½, νΈλ μ΄ μμ΄μ½ 리μμ€
βββ tasks/ # μμ
κΈ°λ‘
βββ README.md # μ΄ νμΌ
- Windows 10 λλ Windows 11
- .NET 8.0 Runtime (λ€μ΄λ‘λ)
- κ΄λ¦¬μ κΆν (μΌλΆ νλ‘κ·Έλ¨ μ μ΄λ₯Ό μν΄ κΆμ₯)
- Releases νμ΄μ§μμ μ΅μ λ²μ λ€μ΄λ‘λ
MonitorLauncher.exeμ€ν- κ΄λ¦¬μ κΆνμΌλ‘ μ€ν κΆμ₯
# μ μ₯μ ν΄λ‘
git clone https://github.com/your-username/MonitorLauncher.git
cd MonitorLauncher
# λΉλ
dotnet build MonitorLauncher.csproj -c Release
# μ€ν νμΌ μμΉ
# bin/Release/net8.0-windows/MonitorLauncher.exe- νλ‘κ·Έλ¨μ μ€νν©λλ€ (κ΄λ¦¬μ κΆν κΆμ₯)
- λͺ¨λν° μ ν: λλ‘λ€μ΄μμ μνλ λͺ¨λν° μ ν
- μ€ν νμΌ μ§μ : "μ°Ύμ보기..." λ²νΌμΌλ‘ νλ‘κ·Έλ¨ μ ν
- μΈμ μ λ ₯ (μ ν): νλ‘κ·Έλ¨ μ€ν μ νμν μΈμ μ λ ₯
- μ°½ μν μ ν: μ 체νλ©΄, μ°½λͺ¨λ, 볡μ μ€ μ ν
- μ€ν λ²νΌ ν΄λ¦
νλ‘ν μ μ₯:
- νλ‘κ·Έλ¨ κ²½λ‘, λͺ¨λν°, μ°½ μνλ₯Ό μ€μ
- "νλ‘ν μ μ₯" λ²νΌ ν΄λ¦
- νλ‘ν μ΄λ¦ μ λ ₯ (μ: "κ²μ - λͺ¨λν° 2")
νλ‘ν μ€ν:
- νλ‘ν λͺ©λ‘μμ λλΈν΄λ¦νλ©΄ ν΄λΉ μ€μ μΌλ‘ μ¦μ μ€ν
- λλ νλ‘ν μ ν ν "μ€ν" λ²νΌ ν΄λ¦
νλ‘ν μμ :
- νλ‘ν μ ν ν "νλ‘ν μμ " λ²νΌ ν΄λ¦
μν¬μ€νμ΄μ€ μ μ₯:
- 볡μνκ³ μΆμ μ± μ°½μ μνλ λͺ¨λν°μ μμΉμ λ°°μΉ
- μν¬μ€νμ΄μ€ νμμ "νμ¬ λ°°μΉ κ°μ Έμ€κΈ°" ν΄λ¦
- ν¬ν¨ν μ°½λ§ μ²΄ν¬
- μν¬μ€νμ΄μ€ μ΄λ¦ μ λ ₯ ν "μ μ₯" ν΄λ¦
μν¬μ€νμ΄μ€ μ€ν:
- μ μ₯λ μν¬μ€νμ΄μ€λ₯Ό μ ν ν "μ€ν" ν΄λ¦
- λλ νΈλ μ΄ λ©λ΄μ "μν¬μ€νμ΄μ€ μ€ν"μμ λ°λ‘ μ€ν
λͺ¨λ μ°½ μ£Ό λͺ¨λν°λ‘ λͺ¨μΌκΈ°:
- μν¬μ€νμ΄μ€ νμμ "λͺ¨λ μ°½ μ£Ό λͺ¨λν°λ‘" λ²νΌ ν΄λ¦
- νλ©΄ λ°μ μκ±°λ λΉμ μ μμΉμ μλ μ°½μ μ£Ό λͺ¨λν° μ€μμΌλ‘ μ΄λ
- μ°½μ λ«μ λ "λ°±κ·ΈλΌμ΄λ μ€ν" μ ν μ μμ€ν νΈλ μ΄λ‘ μ΄λ
- νΈλ μ΄ μμ΄μ½ λλΈν΄λ¦μΌλ‘ μ°½ νμ/μ¨κΉ
- νΈλ μ΄ μμ΄μ½ μ°ν΄λ¦μΌλ‘ λ©λ΄ μ κ·Ό
- νΈλ μ΄ λ©λ΄μ "νλ‘ν μ€ν"μμ μ μ₯λ νλ‘νμ λ°λ‘ μ€ν κ°λ₯
- νΈλ μ΄ λ©λ΄μ "μν¬μ€νμ΄μ€ μ€ν"μμ μ μ₯λ μν¬μ€νμ΄μ€λ₯Ό λ°λ‘ μ€ν κ°λ₯
νλ‘νμ λ€μ μμΉμ μ μ₯λ©λλ€:
%APPDATA%\MonitorLauncher\profiles.json
νλ‘ν νμΌμ λ°±μ νκ±°λ λ€λ₯Έ μ»΄ν¨ν°λ‘ 볡μ¬νμ¬ μ¬μ©ν μ μμ΅λλ€.
μν¬μ€νμ΄μ€λ λ€μ μμΉμ μ μ₯λ©λλ€:
%APPDATA%\MonitorLauncher\workspaces.json
- μΈμ΄: C# 12.0
- νλ μμν¬: .NET 8.0
- UI: Windows Forms
- API: Win32 API (P/Invoke)
- λΉλ μμ€ν : MSBuild / .NET SDK
MonitorLauncher/
βββ MonitorLauncher.csproj # νλ‘μ νΈ νμΌ
βββ app.manifest # κ΄λ¦¬μ κΆν μꡬ μ€μ
βββ Program.cs # μ§μ
μ
βββ MainForm.cs # λ©μΈ UI λ° λ‘μ§
βββ AppLauncherService.cs # νλ‘κ·Έλ¨ μ€ν λ° μ°½ μ΄λ μ‘°μ
βββ WorkspaceRestoreService.cs # μν¬μ€νμ΄μ€ 볡μ λ° μ°½ λͺ¨μΌκΈ°
βββ WindowCaptureService.cs # νμ¬ μ΄λ € μλ μ°½ μΊ‘μ²
βββ LaunchRequest.cs # μ€ν μμ² λͺ¨λΈ
βββ LaunchResult.cs # μ€ν κ²°κ³Ό λͺ¨λΈ
βββ WorkspaceProfile.cs # μν¬μ€νμ΄μ€ μ μ₯/λ‘λ
βββ AppWindowProfile.cs # μν¬μ€νμ΄μ€ μ± μ°½ λͺ¨λΈ
βββ CapturedWindowInfo.cs # μΊ‘μ²λ μ°½ μ 보
βββ AppWindowState.cs # μ°½ μν enum
βββ Win32Api.cs # Win32 API λνΌ
βββ WindowController.cs # μ°½ μμΉ μ μ΄ λ‘μ§
βββ Profile.cs # νλ‘ν μ μ₯/λ‘λ
βββ Resources/ # 리μμ€ νμΌ
β βββ logo.png # μ± λ‘κ³
β βββ favicon.ico # μ±/νΌ/νΈλ μ΄ μμ΄μ½
βββ tasks/ # μμ
κΈ°λ‘ λ° κ΅ν
βββ .github/
β βββ workflows/
β βββ build.yml # GitHub Actions λΉλ μ€μ
βββ README.md # μ΄ νμΌ
- UWP μ±: Windows μ€ν μ΄ μ±μ μλ²½νκ² μ§μλμ§ μμ μ μμ΅λλ€.
- μ€νλμ μ€ν¬λ¦°: μΌλΆ νλ‘κ·Έλ¨μ μ€νλμ μ€ν¬λ¦°μΌλ‘ μΈν΄ μ°½ μμΉ μ μ΄κ° μ§μ°λ μ μμ΅λλ€.
- κ΄λ¦¬μ κΆν: κ΄λ¦¬μ κΆνμΌλ‘ μ€νλλ νλ‘κ·Έλ¨μ μ μ΄νλ €λ©΄ λ°μ²λ κ΄λ¦¬μ κΆνμΌλ‘ μ€νν΄μΌ ν©λλ€.
- λ°μ²ν μ±/κ²μ: μμ νλ‘μΈμ€μμ μ€μ μ°½μ λμ°λ νλ‘κ·Έλ¨μ κ°μ λ fallbackμ μ¬μ©νμ§λ§, 100% 보μ₯λμ§λ μμ΅λλ€.
- μν¬μ€νμ΄μ€ 볡μ: μ±μ΄ μ€ν ν μ°½ μ λͺ©μ΄λ νλ‘μΈμ€ ꡬ쑰λ₯Ό ν¬κ² λ°κΎΈλ κ²½μ° μΌλΆ μ°½μ μλ κ°μ§λμ§ μμ μ μμ΅λλ€.
- κ΄λ¦¬μ κΆν μ€ν: λλΆλΆμ νλ‘κ·Έλ¨ μ°½ μ μ΄λ₯Ό μν΄ κ΄λ¦¬μ κΆνμΌλ‘ μ€ννλ κ²μ κΆμ₯ν©λλ€.
- νλ‘ν λ°±μ
: μ€μν νλ‘νμ μ κΈ°μ μΌλ‘ λ°±μ
νμΈμ (
%APPDATA%\MonitorLauncher\profiles.json)
# .NET 8.0 SDK μ€μΉ νμ
dotnet --version # 8.0.x νμΈ
# νλ‘μ νΈ λ³΅μ
git clone https://github.com/your-username/MonitorLauncher.git
cd MonitorLauncher
# μμ‘΄μ± λ³΅μ
dotnet restore
# λΉλ
dotnet build
# μ€ν
dotnet run- μ΄ μ μ₯μλ₯Ό Fork
- κΈ°λ₯ λΈλμΉ μμ± (
git checkout -b feature/AmazingFeature) - λ³κ²½μ¬ν μ»€λ° (
git commit -m 'Add some AmazingFeature') - λΈλμΉμ Push (
git push origin feature/AmazingFeature) - Pull Request μμ±
λ²κ·Έλ₯Ό λ°κ²¬νμ ¨λ€λ©΄ Issuesμ 리ν¬νΈν΄μ£ΌμΈμ.
- v2.0.0: μ¬λ¬ μ± μ°½ λ°°μΉλ₯Ό μ μ₯/볡μνλ μν¬μ€νμ΄μ€ λ§€λμ MVP μΆκ°
- v1.2.6: λͺ¨λν° μ°κ²° λ³κ²½ ν μ€ν/νλ‘ν μ μ₯ μμ μ± κ°ν, νλ‘ν μμ μ μ₯ νλ¦ λ³΄μ
- v1.2.5: μ Έ μ€ν μ°½ μΆμ μμ ν, μ°½ 보μ 루ν μμ , μ μ°½ μ΄λ μ±κ³΅ νμ κ°μ
- v1.2.4: νλ‘κ·Έλ¨ μ€ν λ‘μ§ μλΉμ€ λΆλ¦¬, μ€ν μμ²/κ²°κ³Ό λͺ¨λΈ μΆκ°,
MainFormμ± μ μ 리 - v1.2.3: μ± λ‘κ³ μΆκ°, GitHub Actions μλ λΉλ/λ¦΄λ¦¬μ€ μ€μ
- v1.2.2: μ±λ₯ μ΅μ ν (CPU μ¬μ©λ 40% κ°μ), μ°½ μμΉ μ μ΄ κ°ν
- v1.1.0: μμ€ν νΈλ μ΄ κΈ°λ₯, μ°½ μν μ΅μ κ°μ
μ΄ νλ‘μ νΈλ μμ λ‘κ² μ¬μ©, μμ , λ°°ν¬ν μ μμ΅λλ€.
μ΄ νλ‘μ νΈλ₯Ό μ¬μ©ν΄μ£Όμκ³ κΈ°μ¬ν΄μ£Όμλ λͺ¨λ λΆλ€κ» κ°μ¬λ립λλ€.
β μ΄ νλ‘μ νΈκ° λμμ΄ λμ ¨λ€λ©΄ Starλ₯Ό λλ¬μ£ΌμΈμ! β
Made with β€οΈ for Windows users