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

안녕하세요. :smile:

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

image

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

using System.Diagnostics;

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


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

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

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

읽어주셔서 감사합니다.

3 Likes

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

image

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

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

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

3 Likes

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

3 Likes

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

2 Likes

image

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

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

3 Likes

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