본문 바로가기
Program/C# .NET

[C# WPF] 프로그램 작업표시줄에서 숨기기 / 숨겨진 아이콘 표시

by 냠만 2024. 2. 23.

[프로그램 작업표시줄에서 숨기기]

지난 포스팅에서는 작업표시줄에 있는 프로그램 아이콘 변경하는 방법을 공유했습니다. 이번에는 작업표시줄에 있는 프로그램을 백그라운드로 돌리고, 실행 중인 백그라운드 프로그램을 작업표시줄 오른쪽 끝부분에 있는 숨겨진 아이콘 표시에서 확인할 수 있는 방법을 공유해 드리겠습니다.

보통 프로그램은 하나로 실행되고 백그라운드로 실행되는 스레드를 분할하는 게 일반적인데요. 필자는 단순히 스레드를 분할할 수 있는 단계가 아닌 별도 모니터링 프로그램을 백그라운드로 돌려야 하는 상황이었어서 해당 기능을 사용했습니다.

메인 프로그램 A가 다운되면 안 되기 때문에 서브프로그램 B에서 A프로그램을 주시하며 종료되었을 때 다시 실행시켜 주고, 디스크 관리도 더불어 해주는 구조였죠. 물론 스레드 분할과 윈도우 스케줄러로도 충분히 해결 가능했지만 양산라인에 셋업 해야 되는 PC가 여러 대인 구조에서는 복붙만큼 쉽고 편리하게 관리할 수 있는 구조는 없어서 진행하게 되었습니다.

 

 

[숨기기 방법 및 순서]

1. 프로젝트 Resource 폴더에 아이콘 이미지(.ico) 넣기

2. 프로젝트 Resource 선택하여 추가

3. 추가된 Resource 불러와서 '숨겨진 아이콘 표시' 탭에 넣기

4. 작업표시줄에 보여지는 프로그램 아이콘 숨기기

먼저 종합적으로 순서를 작성하자면 위와 같습니다.

 

1. 아이콘 이미지 필요 경로에 복사하기

현재 진행 중인 솔루션에 접근해서 프로젝트 폴더 내부에 있는 Properties 폴더로 접근합니다.

Visual Studio를 통해 솔루션을 열면 솔루션 우클릭을 통해 쉽게 경로로 접근할 수 있습니다.

 

 

2. 프로젝트에서 리소스(아이콘 이미지 ico) 파일 선택

솔루션 폴더에서 Resources.resx 파일을 더블클릭하면 리소스를 추가할 수 있습니다.

여기서 이미 이미지파일을 소유하고 있기 때문에 기존 파일 추가를 선택합니다.

기존 파일 추가를 할 경우 자동으로 리소스가 추가된 걸 확인할 수 있습니다.

이미지 파일 확장자에 따라 파일오픈 다이얼로그에서 보이지 않을 수 있으니 확장자를 모든 파일(*.*)로 바꿔야 합니다.

 

3.4. 추가된 Resource 불러와서 '숨겨진 아이콘 표시' 탭에 넣기

이제 프로그램 소스에서 추가된 이미지를 불러와 아이콘을 만들어 넣어주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
namespace IconSetting
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.Hide(); // 작업 표시줄에서 프로그램 아이콘 숨기기
            SetTrayIcon(); // 숨겨진 아이콘 표시에 프로그램 추가
            InitializeComponent();
        }
 
        private void Window_Closed(object sender, EventArgs e)
        {
            Environment.Exit(0);
 
        }
 
 
        private void SetTrayIcon()
        {
            // 숨겨진 아이콘 표시에 프로그램 추가
            System.Windows.Forms.NotifyIcon tray = new System.Windows.Forms.NotifyIcon();
 
            // 프로그램 아이콘 우클릭시 디스플레이 되는 탭 메뉴
            System.Windows.Forms.ContextMenu menu = new System.Windows.Forms.ContextMenu();
 
            // 프로그램 아이콘 우클릭시 디스플레이 되는 탭 메뉴 속 아이템
            System.Windows.Forms.MenuItem closeItem = new System.Windows.Forms.MenuItem();
 
            // 메뉴에 아이템 추가
            menu.MenuItems.Add(closeItem);
            // 아이템 속성 설정
            closeItem.Index = 0;
            closeItem.Text = "Exit Program";
            closeItem.Click += delegate (object sender, EventArgs args)
            {
                Close();
            };
 
            // 메뉴 속 아이템 2 추가
            System.Windows.Forms.MenuItem closeItem1 = new System.Windows.Forms.MenuItem();
            menu.MenuItems.Add(closeItem1);
            closeItem1.Index = 0;
            closeItem1.Text = "Menu1";
 
            // 프로그램에 우클릭 시 발생되는 메뉴 참조
            tray.ContextMenu = menu;
 
 
            // 프로그램에 우클릭 시 발생되는 이벤트 및 아이콘 추가
            tray.Text = "MainProgram";
            tray.Icon = Properties.Resources._256_my_computer_icon_icons_com_76637;
            tray.Visible = true;
            tray.DoubleClick += delegate (object sender, EventArgs args)
            {
                System.Windows.Application.Current.MainWindow.Show();
                System.Windows.Application.Current.MainWindow.WindowState = System.Windows.WindowState.Normal;
            };
 
            tray.BalloonTipClosed += (sender, e) => {
                var thisIcon = (System.Windows.Forms.NotifyIcon)sender;
                thisIcon.Visible = false;
                thisIcon.Dispose();
            };
        }
    }
}
cs

MainWindow가 InitializeComponent() 되는 구간에 해당 부분들을 실행해 주면 됩니다.

이니셜라이즈가 되기 전과 후 결과에는 차이가 없으니 순서는 신경 쓰지 않으셔도 됩니다.

 

[숨겨진 아이콘 클릭]

최종적으로 작업표시줄에서는 프로그램 아이콘이 사라지고, 숨겨진 아이콘 표시에는 프로그램 아이콘이 추가된 것을 확인할 수 있습니다.

 

중요한 점은 여기서 이제 추가적으로 구현되어야 할 부분은 숨겨진 아이콘 표시에서 프로그램을 더블클릭하면 포그라운드로 바뀌면서 작업표시줄에 프로그램이 Display 됩니다. 다시 숨기고자 하실 때는 별도의 Hide 버튼 이벤트를 추가하셔서 Form을 Hide 해주셔야 합니다.

해당 부분은 위 소스에 구현이 안되어있으니 사용하시는 분 입맛에 맞게 커스터마이징 하시면 됩니다.

 

해당 글이 도움이 되셨다면 공감과 구독 부탁드리며 좋은 하루 보내세요 :)