系统托盘消息

仿QQ托盘消息盒子 这次写的防QQ托盘的消息盒子代码没有放到Github上面,由于这个工程里面有一部份核心代码.不过这里不妨碍我给大家讲解怎么编写一个属于自己的防QQ托盘的代码. 废话不多说,我们先来看看防QQ托盘的效果图                                                                 这是我用VS起来测试的效果 如果这个 阅读详情

package com.msg;  
 
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TextArea;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;  

 
 
/** 
 *  
 * 创建闪动的托盘图像 
 * @author Everest 
 * 
 */ 
public class BickerTray extends JFrame implements Runnable {  
 
    private static final long serialVersionUID = -3115128552716619277L;  
 
    private SystemTray sysTray;// 当前操作系统的托盘对象  
    private TrayIcon trayIcon;// 当前对象的托盘  
 
    private ImageIcon icon = null;  
    private TextArea ta = null;  
      
    private static int count = 1; //记录消息闪动的次数  
    private boolean flag = false; //是否有新消息  
    private static int times = 1; //接收消息次数  
 
    public BickerTray() {  
        this.createTrayIcon();// 创建托盘对象  
        Image image = this.getToolkit().getImage(getRes("com/img/f32.gif"));  
        this.setIconImage(image);  
        init();  
    }  
 
    public URL getRes(String str){  
         return this.getClass().getClassLoader().getResource(str);  
    }  
      
    /** 
     * 初始化窗体的方法 
     */ 
    public void init() {  
        this.setTitle("消息盒子");  
        ta = new TextArea("");  
        ta.setEditable(false);  
        this.add(ta);  
        this.setSize(400, 400);  
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setLocationRelativeTo(null);  
        // 添加窗口最小化事件,将托盘添加到操作系统的托盘  
        /*this.addWindowListener(new WindowAdapter() { 
            public void windowIconified(WindowEvent e) { 
                addTrayIcon(); 
            } 
        });*/ 
        addTrayIcon();  
        this.setVisible(true);  
    }  
 
    /** 
     * 添加托盘的方法 
     */ 
    public void addTrayIcon() {  
        try {  
            sysTray.add(trayIcon);// 将托盘添加到操作系统的托盘  
            setVisible(false);    // 使得当前的窗口隐藏  
            new Thread(this).start();  
        } catch (AWTException e1) {  
            e1.printStackTrace();  
        }  
    }  
 
    /** 
     * 创建系统托盘的对象 步骤:  
     * 1,获得当前操作系统的托盘对象  
     * 2,创建弹出菜单popupMenu  
     * 3,创建托盘图标icon 
     * 4,创建系统的托盘对象trayIcon 
     */ 
    public void createTrayIcon() {  
        sysTray = SystemTray.getSystemTray();// 获得当前操作系统的托盘对象  
        icon = new ImageIcon(getRes("com/img/f17.gif"));// 托盘图标  
        PopupMenu popupMenu = new PopupMenu();// 弹出菜单  
        MenuItem mi = new MenuItem("打开");  
        MenuItem exit = new MenuItem("退出");  
        popupMenu.add(mi);  
        popupMenu.add(exit);  
        // 为弹出菜单项添加事件  
        mi.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容  
                BickerTray.this.setExtendedState(JFrame.NORMAL);  
                BickerTray.this.setVisible(true); // 显示窗口  
                BickerTray.this.toFront(); //显示窗口到最前端  
                flag = false;  //消息打开了  
                count = 0; times++;  
            }  
        });  
        exit.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                System.exit(0);  
            }  
        });  
        trayIcon = new TrayIcon(icon.getImage(), "消息盒子", popupMenu);  
        /** 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口 */ 
        trayIcon.addMouseListener(new MouseAdapter() {  
            public void mouseClicked(MouseEvent e) {  
                if (e.getClickCount() == 2) { // 鼠标双击  
                    ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容  
                    BickerTray.this.setExtendedState(JFrame.NORMAL);  
                    BickerTray.this.setVisible(true); // 显示窗口  
                    BickerTray.this.toFront();  
                    flag = false;  //消息打开了  
                    count = 0; times++;  
                }  
            }  
        });  
    }  
 
    /** 
     * 线程控制闪动  
     */ 
    public void run() {  
        while (true) {  
            if(flag){ // 有新消息  
                try {  
                    if(count == 1){  
                        // 播放消息提示音  
                        //AudioPlayer p = new AudioPlayer(getRes("file:com/sound/Msg.wav"));  
                        //p.play(); p.stop();  
                        try {  
                            AudioClip p = Applet.newAudioClip(new URL("file:sound/msg.wav"));  
                            p.play();  
                        } catch (MalformedURLException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                    // 闪动消息的空白时间  
                    this.trayIcon.setImage(new ImageIcon("").getImage());  
                    Thread.sleep(500);  
                    // 闪动消息的提示图片  
                    this.trayIcon.setImage(icon.getImage());  
                    Thread.sleep(500);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
                count++;  
            }else{ // 无消息或是消息已经打开过  
                this.trayIcon.setImage(icon.getImage());  
                try {  
                    Thread.sleep(20000);  
                    flag = true;  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) {  
        JFrame.setDefaultLookAndFeelDecorated(true);  
        try {  
            UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());  
        } catch (UnsupportedLookAndFeelException e) {  
            e.printStackTrace();  
        }  
 
        SwingUtilities.invokeLater(new Runnable() {  
            public void run() {  
                new BickerTray();  
            }  
        });  
    }  
 
} 

PyQt实现系统托盘图标和消息气泡 你需要将"path/to/icon.png"替换为你自己的图标路径。对象表示一个动作,这里我们创建了一个名为"Show Message"的动作,并将其与。对象表示一个动作,这里我们创建了一个名为"Show Message"的动作,并将其与。对象表示一个动作,这里我们创建了一个名为"Show Message"的动作,并将其与。对象表示一个动作,这里我们创建了一个名为"Show Message"的动作,并将其与。对象表示一个动作,这里我们创建了一个名为"Show Message"的动作,并将其与。 阅读详情

相关推荐

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

统托盘就是运行的某个程序在电脑右下角的小图标,相信大家都很熟悉。QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例,在examples文件夹下面,大家可以自行研究。 下面是我自己进行实现的一个示例,主要实现的功能: 1.托盘显示,托盘图标添加; 2.托盘激活事件分发; 3.托盘菜单; 4.托盘消息,点击消息,显示主窗口。 想要显示 托盘图标,首先需要创建一个 QSystemTrayIcon对象。可以给此对象设置一些信息,比如ToolTip,比如图标。需要调用show,托盘才能

技术联盟 827

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

Qt 实现系统托盘,托盘菜单,托盘消息 系统托盘就是运行的某个程序在电脑右下角的小图标,相信大家都很熟悉。QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例,在examples文件夹下面,大家可以自行研究。 下面是我自己进行实现的一个示例,主要实现的功能: 1.托盘显示,托盘图标添加; 2

GreenArrowMan-优快云博客 2万+

WPF实现系统托盘右下角消息推送功能

在现代桌面应用程序开发中,WPF(Windows Presentation Foundation)作为微软推出的强大UI框架,广泛应用于各类企业级软件开发。随着用户对交互体验要求的提升,应用程序需要在不打断用户操作的前提下,及时传递关键信息。此时,右下角系统托盘消息推送机制便显得尤为重要。系统托盘(System Tray)作为Windows桌面的重要组成部分,提供了一个低干扰、高可用性的通知入口。通过该机制,WPF应用程序可以在后台运行时向用户推送通知,例如新消息提醒、任务完成提示等。

weixin_36149538的博客 905

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

概述 系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。 演示Demo实现功能: 1.应用启动后,任务栏,系统托盘可以看到该程序。 2.点击右上角×关闭窗口,自动隐藏窗口,托盘可以看到该程序。 3.鼠标在托盘图标上右键,弹出"退出程序"菜单栏,并带有图标。 ...

码农code之路 3324

海康威视门禁考勤设备数据对接实战:从被动推送到主动拉取

本文深入探讨了海康威视门禁考勤设备数据对接的两种核心方案:HTTP推送与SDK主动拉取。文章对比了两种方式的适用场景、技术实现与优缺点,为开发者提供了从设备配置、代码编写到工程化部署的完整实战指南,帮助读者根据项目规模、网络环境及数据稳定性要求,做出最合适的技术选型。

weixin_29284657的博客 673

引入 CloudWeGo 后飞书管理后台平台化改造的演进史

飞书管理后台是飞书套件专为企业管理员提供的信息管理平台,它通过引入 Kitex 泛化调用对飞书管理后台进行平台化改造,成为了企业统一数字化管理平台。本文将从三个方面为大家讲解 Kitex 泛化调用在飞书管理后台平台化改造过程中的落地实践。...

weixin_44186218的博客 1764

[转贴]托盘编程全接触

No.1 [转贴]托盘编程全接触 托盘编程全接触 作者:acute 托盘编程 一、托盘简介 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。其实,托盘区的编程很简单,下面简要阐述一下子喽 二、托盘编程相关函数 其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把

糯米糊糊的专栏 1782

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 489

Qt 封装系统托盘类进行使用(系统托盘、托盘菜单、托盘消息框)

继承系统托盘类,将其封装成自己的类进行使用。(系统托盘、托盘菜单、托盘消息框) 网上有许多博客也都有介绍系统托盘的使用,但是他们讲的都是在主程序构造函数中进行操作的,虽然可以实现,但是却显得代码很臃肿,不是很好看;当你自己定义类实现时,代码就清爽很多了。

cpp_learner的博客 2097

用友U8库龄分析避坑指南:物料出入库日期计算的5个常见错误

本文深入剖析了在用友U8系统中进行库龄分析时,物料出入库日期计算的五个常见陷阱。从数据源选择、业务类型过滤、计价方式逻辑、期初数据处理到查询性能优化,逐一解析错误根源并提供避坑指南,帮助企业获得准确的库龄数据,有效管理库存与资金风险。

weixin_29209801的博客 456

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享

各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。

haoxingheng的专栏 1448

Electron实现将桌面应用放入系统托盘,并实现有新消息闪动功能

在vue+electron项目中,实现系统托盘 官方描述: 用一个 Tray 来表示一个图标,这个图标处于正在运行的系统的通知区,通常被添加到一个 context menu 上. 用 new Tray('/path/to/my/icon'); 创建一个与image相关的图标 给该图标绑定click事件, 单击该系统托盘图标,控制窗口的显示隐藏。 Tray.setToolTip(toolTip) 方法实现鼠标放在图标上,显示提示信息,类似元素的title属性。 通过**Menu.buildFromTemp

ddx2019的博客 4128

关于【中孚计算机终端保密检查系统】的卸载

卸载中孚计算机终端保密检查系统

码农之路,向死而生 4万+

PyQt5 系统托盘图标和消息通知

一个完整的应用没有消息通知和系统托盘图标是不行滴。 参考官网资料和其他个人的博客我做了个这样的例子 class window(QWidget): def __init__(self, parent=None): super(window, self).__init__(parent) ti = TrayIcon(self) ti.show() 首先创建一个空窗口用来测试,TrayIcon就是我继承来自QSystemTrayIcon显示系统托盘

sinat_41292836的博客 1253

C++五子棋人机对战

使用C++,开发五子棋人机对战,快速提升C++项目开发能力。

程序员Rock的博客 5万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Electron如何实现系统托盘有消息时闪烁?

在 Electron 中,你可以通过系统托盘(Tray)API 和 BrowserWindow API 来实现当有新消息时使系统托盘图标闪烁的效果。接下来,你需要监听新消息的到来。例如,你可以有一个正常状态的图标和一个“高亮”状态的图标,然后在它们之间定时切换。首先,你需要创建一个 Tray 实例来代表你的应用在系统托盘中的图标,以及一个(或多个)BrowserWindow 实例来显示你的应用界面。最后,你可能还想处理用户与 Tray 图标的交互,比如点击图标时打开应用窗口,或者停止图标的闪烁。

王铁柱666的博客 712

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Qt 实现系统托盘、托盘菜单、托盘消息教程

Qt 实现系统托盘、托盘菜单、托盘消息教程 去发现同类优质开源项目:https://gitcode.com/ 介绍 本资源文件包含了使用Qt框架实现系统托盘、托盘菜单以及托盘消息的详细教程。通过本教程,您可以快速学习如何在Qt应用程序中添加和使用系统托盘功能,提升用户体验。 文件内容 Qt 实现系统托盘,托盘菜单,托盘消息.zip 本压缩文件中包含了详细的步骤说明、示例代码以及必要的资源文件。...

gitblog_06749的博客 283

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Qt实现系统托盘托盘菜单托盘消息教程:提升用户体验的利器

Qt实现系统托盘托盘菜单托盘消息教程:提升用户体验的利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 Qt 实现系统托盘、托盘菜单、托盘消息教程,这是一份详尽的资源文件,旨在帮助Qt开发者掌握如何在其应用程序中集成系统托盘功能。系统托盘是许多桌面应用程序的常用功能,它允许应用程序在系统任务栏中显示一个图标,并通过该图标提供快捷操作和消息通知,极大地提升了用户操作的便...

gitblog_06777的博客 600

Flex AIR 做一个类似QQ消息提示在系统托盘闪烁图标

来源:http://forum.airia.cn/archiver/FLEX/thread-14645-1.html 用Flex AIR 做一个类似QQ消息提示在系统托盘闪烁图标

Winters_huang'Blog 3410

C++ Win32系统托盘程序开发:从Shell_NotifyIcon到消息循环实战

在Windows桌面开发中,系统托盘是后台服务与工具软件常驻系统的重要界面组件。其核心原理基于Windows的消息驱动机制,通过Shell_NotifyIcon API与系统Shell进行通信,将图标注册到任务栏通知区域。技术实现关键在于正确处理NOTIFYICONDATA结构体版本、绑定隐藏窗口的消息循环以及自定义消息处理。掌握这些底层机制不仅能实现高度定制化的托盘功能,如动态图标更新和复杂右键菜单,更能深入理解Windows GUI编程的消息处理与资源管理逻辑。本文通过纯C++和Win32 API实战,

weixin_33850890的博客 371

Qt之QSystemTrayIcon系统托盘(信息闪烁,右键菜单,消息提示框)

QSystemTrayIcon类为应用程序在系统托盘中提供一个图标。 其他就如代码所说,所有注释都有 mainwindow.h如下 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QTimer> #include <QMenu> #include <QMainWindow> #include &l...

朗朗上口就行啦的博客 4487
上一篇: 把人民币转化成大写
下一篇: 获取IP地址
emjava
博客等级 码龄15年 4粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值