C# 트레이 아이콘 목록을 가져오는 방법?

안녕하세요. :smile:

혹시 C#에서 Windows 10 작업표시줄 우측에
트레이 아이콘 목록을 가져오는 방법이 있을까요?
(보여지는 아이콘, 숨겨진 아이콘)

image

우선 C#에서 기본적으로 제공하는지 알아봤지만 해결하지 못했습니다.

using System.Diagnostics;

(C# Process를 통해 목록을 가져와서 Tray 관련 속성을 찾아봤지만…)


그래서 Win API를 통한 방법을 찾아보고 있는데요.

  • 아이콘 목록 가져오기.
  • 아이콘 이미지 가져오기.
  • 보임, 숨겨짐 상태 알기.

검색을 통해 부분적으로 참고해봤는데 정확히는 찾지 못했습니다.
Win API에 대한 경험도 많이 부족하고 그래서 생각보다 어렵게 느껴지네요. :disappointed_relieved:

읽어주셔서 감사합니다.

3개의 좋아요

어지간하면 Win32 API로 다 나와있어서 저도 어라라? 했는데, 일단 지금으로서는 제일 확실한 방법이 EnumWindows를 이용해서 찾는 다소 무식한 (?) 방법이 최선인 것 같이 보이네요.

image

윈도우 클래스 이름 중에 TrayNotifyWnd 라는 친구를 찾고, 그 아래의 자식 창들을 열거하면 아마 대충 원하는 것을 뽑아내실 수 있지 않을까 싶습니다.

참고로 화면의 도구는 Visual Studio 2019와 함께 제공되는 Spy++ 이라는 도구이고, 엄청 유서깊은 도구입니다. spyxx.exe 로 실행하실 수 있어요~

@kevin13 님! 혹시 조언해주실 수 있는 부분이 있을지 도움을 받고 싶습니다.

3개의 좋아요

@rkttu 님의 의견이 최선인 듯합니다. (딱히 검색해봐도 관련해서는 API도 없고 클래스 이름으로만 구하라는 것만 나오는군요. ^^)

3개의 좋아요

여담입니다만 공식 API로 나온 것이 아닌데다, EnumWindows 같은 함수를 이용해야하다보니 트레이 아이콘 목록을 가져오는 동작은 안정적인 동작이 아니게 될겁니다. 만약 이걸 활용하는 비즈니스 로직을 만드신다면 코너 케이스 대응이 많아질 수 밖에 없을 것 같습니다. :face_with_raised_eyebrow:

2개의 좋아요

image

@rkttu EnumWindows 기반으로 하나하나씩 하고 있습니다!

조금 더 마무리 하고 소스코드도 여기에 링크 걸어두겠습니다.
감사합니다!! :smile:

3개의 좋아요

윈도우 데스크톱 애플리케이션 관련 질문으로 보여 카테고리를 변경합니다.