实现动态系统托盘图标

Posted feiyucha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现动态系统托盘图标相关的知识,希望对你有一定的参考价值。

实现效果:

  技术分享图片

知识运用:

  TcpListener TcpClient  和  NetworkStream类 及  Timer组件

  1> TcpListener类    //用来从Tcp网络客户端侦听连接

  技术分享图片

  2> TcpClient类    //为Tcp网络服务提供客户端连接

  public TcpClient(string hostname,int port)  //远程主机的DNS名 端口号

  3> NetworkStream类  //提供在阻止模式下通过Stream套接字发送和接受数据的方法

    //其Read方法用于从NetworkStream类读取数据

  public override int Read(byte[] buffer,int offset,int size)

  技术分享图片

  4> notifyIcon控件的Icon属性

实现代码:

        //该方法用于监听指定端口  并通过该端口发送消息
        private void StartListen()
        {
            tcpListener = new TcpListener(888);                                     //创建TcpListener对象
            tcpListener.Start();                                                //开始监听
            while (true)
            {
                TcpClient client = tcpListener.AcceptTcpClient();                    //接受连接请求
                NetworkStream nstream = tcpListener.AcceptTcpClient().GetStream();   //获取数据流
                byte[] mbyte = new byte[1024];                                        //建立缓存
                int i = nstream.Read(mbyte, 0, mbyte.Length);                         //将数据流写入缓存
                message = Encoding.Default.GetString(mbyte, 0, i);                    //获取传输的内容
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                //IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); //获取本机地址
                string message = "干得好,赏啤酒一箱";                   //传输的内容
                TcpClient client = new TcpClient(textBox1.Text, 888);    //创建TcpClient对象
                NetworkStream netstream = client.GetStream();           //创建NetworkStream对象
                StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);    //创建StreamWriter对象
                wstream.Write(message);                                                 //将信息写入流
                wstream.Flush();
                wstream.Close();                                                        //关闭流
                client.Close();                                                         //关闭TcpClent对象
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
        }

        bool k = true;                                                        //一个标记用于控制图标闪动
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (message.Length > 0)
            {                                           //如果网络中传输了数据
                notifyIcon1.Text = message;
                if (k)
                {
                    notifyIcon1.Icon = Properties.Resources._1;                 //托盘图标为1
                    k = false;
                }
                else
                {
                    notifyIcon1.Icon = Properties.Resources._2;                 //托盘图标为2
                    k = true;
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            td = new Thread(new ThreadStart(this.StartListen));                 //通过线程调用StartListen方法
            td.Start();                                                         //开始运行线程
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (tcpListener != null)
            {
                tcpListener.Stop();                                              //停止侦听对象
            }
            if (td != null)
            {
                if (td.ThreadState == ThreadState.Running)                       //判断线程是否运行
                    td.Abort();                                                 //终止线程
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            message = "";                                                       //清空传输内容
        }

 

以上是关于实现动态系统托盘图标的主要内容,如果未能解决你的问题,请参考以下文章

QT之Qml使用QSystemTrayIcon实现系统托盘

从Webdings字体创建系统托盘图标

Java Swing 实现系统托盘图标

centos7.9下Qt 实现系统托盘,托盘菜单,托盘消息

实现系统托盘

Qt开发实现系统托盘,托盘菜单,托盘消息