스크랩

Windows 11 작업표시줄에 내 앱 UI를 올린다고? .NET 라이브러리 Deskband11Lib 이야기

Windows 11 작업표시줄에 내 앱 UI를 올린다고? .NET 라이브러리 Deskband11Lib 이야기

한눈에 보는 요약

Windows 11로 넘어오면서 사라진 데스크밴드(Deskbands) 기능을 되살려주는 오픈소스 라이브러리가 등장했습니다. 이름은 Deskband11Lib. NuGet으로 설치하면 WinUI 3이나 WPF 앱을 작업표시줄 위젯처럼 올릴 수 있고, 라이선스는 MIT입니다. 실제로 이 라이브러리로 만든 미디어 컨트롤 위젯 BarPlay가 Microsoft Store에 등록되어 동작을 검증했습니다.

왜 만들어졌을까: 사라진 데스크밴드

Windows 10까지는 작업표시줄에 작은 도구모음을 띄우는 데스크밴드 기능이 있었습니다. 미디어 컨트롤, 시스템 모니터, 빠른 실행처럼 "항상 떠 있는 작은 위젯"을 둘 수 있었죠. 그런데 Windows 11에서 이 기능이 통째로 제거되면서, 그 자리를 그리워하는 사용자들이 많았습니다.

핵심 아이디어: 창을 작업표시줄의 일부처럼 보이게

제작자는 GitHub에서 본 zadjii/Deskband11 프로젝트에서 영감을 받았다고 합니다. 접근 방식이 무척 영리한데요:

  • 작업표시줄 위에 투명한 WinUI 3 창을 하나 얹는다
  • 그 창을 작업표시줄의 자식 HWND로 SetParent 한다
  • 콘텐츠 크기에 맞춰 클립 영역을 잡아, 마치 작업표시줄의 일부인 것처럼 보이게 한다

결국 "작업표시줄 위에 떠 있는 창일 뿐"이지만, 이 발상 덕분에 별도 라이브러리 없이도 작업표시줄에 UI를 끼워 넣을 수 있게 됩니다. 다만 원본은 "해커톤급 코드"라 실제 제품에 쓰기엔 한계가 있었고, 그래서 제대로 된 라이브러리로 다시 짠 것이죠.

사용법은 정말 간단합니다

창을 하나 만들어 TaskbarContentHost에 넘기면 끝입니다.

var window = new MainWindow();
var host = new TaskbarContentHost(window, rootElement, new TaskbarContentHostOptions
{
    PreferredWidth = 360,
    PreferredHeight = 48
});

await host.AttachWhenLayoutReadyAsync();
window.Activate();

WPF도 API가 거의 동일합니다. 게다가 다음 까다로운 처리들을 라이브러리가 알아서 해줍니다.

  • 작업표시줄 정렬(좌측/중앙) 감지
  • 시작 버튼·알림 영역과의 겹침 방지
  • Explorer 재시작 시 복구
  • 레이아웃 변경 애니메이션

쉽지 않았던 "빈 공간 계산"

원본 코드를 그대로 돌리면 창의 위치와 크기가 엉뚱하게 잡혔다고 합니다. Windows 11 업데이트로 작업표시줄 구현이 바뀐 탓인지, 원래 코드가 어긋난 것인지 판단이 어려웠고, 결국 작업표시줄을 하나씩 뜯어보며 현재 빌드 기준으로 직접 확인할 수밖에 없었다고 하네요.

그래서 원본에서는 UI Automation 방식과 창 크기·위치를 잡는 Win32 API 정도만 참고하고, 빈 공간을 계산하는 로직은 처음부터 다시 작성했습니다. 시작 버튼, 앱 버튼 그룹, 위젯 버튼, 알림 영역의 위치를 읽어 남는 공간을 구하는데, 정렬이 좌측이냐 중앙이냐에 따라 여유 공간의 자리가 달라지는 점까지 새로 고려했다고 합니다.

검증용으로 만든 앱: BarPlay

라이브러리가 정말 쓸 만한지 확인하려고 직접 앱을 만들어 Microsoft Store에 올렸습니다. BarPlay는 작업표시줄에 현재 재생 중인 미디어의 썸네일·제목·컨트롤을 띄워주는 위젯입니다.

  • Spotify, 브라우저, YouTube PWA 등 시스템 미디어 컨트롤(SMTC) 지원 앱이면 모두 동작
  • NativeAOT 컴파일로 시작 속도와 리소스 사용량 최소화

어디에 쓸 수 있을까

WinUI 3·WPF로 만든 콘텐츠를 별도 창 없이 "항상 보이는 자리"에 둘 수 있다는 게 핵심입니다. 예를 들면:

  • 타이머
  • 미디어 재생 컨트롤(BarPlay처럼)
  • 빌드 상태·CI 알림
  • 시스템 모니터
  • 퀵런처, 계정 전환, 알림 표시기

본인 앱의 컨트롤과 스타일을 그대로 가져가면서 작업표시줄에 올릴 수 있어, 데스크밴드가 사라진 Windows 11에서 이런 경험을 구현할 수 있는 거의 유일한 .NET 라이브러리라는 게 제작자의 설명입니다.

마무리

MIT 라이선스이며, 샘플 프로젝트(Deskband11Lib.WinUI.Sample, Deskband11Lib.Wpf.Sample)를 복사해 바로 시작할 수 있습니다. 피드백, 이슈, PR 모두 환영한다고 하니, Windows 11 작업표시줄을 다시 활용하고 싶었던 .NET 개발자라면 한 번쯤 둘러볼 만한 프로젝트입니다.


원문: https://news.hada.io/topic?id=30817