Unity | 트레이에 창을 숨기고 작업 표시줄에 icon을 표시하지 않음

2665 단어 Unity
효과는 다음 그림과 같습니다.
사용된 플러그인: (Plugins 폴더에 놓고 각 버전을 다운로드하려면 클릭)
  • System.Drawing.dll
  • System.Windows.Forms.dll
  • System.Deployment.dll (.Net4.x 기반 dll 패키지를 사용할 때 이 dll을 사용해야 합니다. 그렇지 않으면 오류가 발생합니다)
  • 코드는 다음과 같습니다.
    using System;
    using System.Runtime.InteropServices;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class LayoutManager : MonoBehaviour
    {
        [DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();
    
        [DllImport("user32.dll")]
        public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
    
        private const int SW_HIDE = 0;  //hied task bar
    
        private const int SW_RESTORE = 9;//show task bar
        
        private static System.Windows.Forms.NotifyIcon _notifyIcon = new System.Windows.Forms.NotifyIcon();
    
        private static int _width = 100, _height = 100;
    
        public Button btn;
    
        private IntPtr window;
       
        private void Start()
        {
            btn.onClick.AddListener(delegate
            {
                HideTaskBar();
            });
        }
        
        public void HideTaskBar()//      
        {
            try
            {
                window = GetForegroundWindow();
    
                ShowWindow(window, SW_HIDE);
    
                _notifyIcon.BalloonTipText = "AIScanner1.1.0";//        
    
                _notifyIcon.Text = "AIScanner";//          
    
                _notifyIcon.Visible = true;//        
    
                _notifyIcon.Icon = CustomTrayIcon(Application.streamingAssetsPath + "/icon.png", _width, _height);//    
    
                _notifyIcon.ShowBalloonTip(2000);//        
    
                _notifyIcon.MouseClick += notifyIcon_MouseClick;//          
            }
            catch(Exception e)
            {
                Debug.Log(e.ToString());
            }
        }
    
        private static System.Drawing.Icon CustomTrayIcon(string iconPath, int width, int height)
        {
            System.Drawing.Bitmap bt = new System.Drawing.Bitmap(iconPath);
    
            System.Drawing.Bitmap fitSizeBt = new System.Drawing.Bitmap(bt, width, height);
    
            return System.Drawing.Icon.FromHandle(fitSizeBt.GetHicon());
        }
    
        private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)//      
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                _notifyIcon.MouseDoubleClick -= notifyIcon_MouseClick;
    
                _notifyIcon.Visible = false;
    
                ShowWindow(window, SW_RESTORE);
            }
        }
    
        private void OnDestroy()
        {
            _notifyIcon.MouseDoubleClick -= notifyIcon_MouseClick;
        }
    }
    
    
    

    포장할 때 Unity->Player Setting->Scripting Runtime Version과 APi Compatibility Level 두 가지 옵션을 주의하십시오.

    좋은 웹페이지 즐겨찾기