说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用Visual Basic编写托盘程序

HTML文档下载 WORD文档下载 PDF文档下载
用Visual Basic编写托盘程序



  在WINDOWS98里,右下角有许多应用程序的图标。而程序本身的窗口是隐藏的,若你需要调用应用程序的窗口,则双击该图标即可。这种程序称为托盘程序。这是WINDOWS98操作系统的一大特色。使用户能够更加快捷的显示和隐藏应用程序,可以使任务栏不致于太乱。托盘程序在Visual Basic里是怎么实现的呢?
    编写托盘程序主要解决两个问题:(1)创建、修改、删除托盘;(2)如何对托盘接收到的消息进行处理。这就要用到几个Windows API函数。
    首先,Shell_NotifyIcon是用于托盘的Shell API。该API用到一个NOTIFYICONDATA结构.
  Type NOTIFYICONDATA
    cbSize As Long '该结构所占字节数
    hwnd As Long '接收托盘图标消息的窗口指针
    uID As Long '由程序定义的图标识别符,因为有的程序有多个图标
    uFlags As Long '对托盘图标操作的标志,包括添加、删除、修改
    uCallbackMessage As Long '标志应用程序的消息
    hIcon As Long '托盘图标指针
    szTip As String * 64 '当鼠标指到托盘图标时提示字符串
  End Type
    其次,应该考虑怎样在VB中接收、处理托盘的消息(双击、单击、左键、右键)。C++、Delphi等语言对消息循环的处理较简单,但在VB中处理消息循环时必须应用Win32的SetWindowLong、CallWindowProc这两个API函数。SetWindowLong 函数利用GWL_WNDPROC 索引来创建窗口类的子类(窗口类是用来创建窗口的),它使用AddressOf关键字和回调函数(WindowProc)来截取消息并根据消息来执行相应的功能,如窗口的最大化、最小化、隐藏、退出等。CallWindowProc函数调用原窗口类缺省的指针,程序最后退出时可通过SetWindowLong来关闭子类,重新使原来的Windows过程成为回调函数。
    本程序项目包括一个模块和一个窗体
    1、模块源代码为:
   Option Explicit '强制定义每个使用的变量
    Type NOTIFYICONDATA '定义结构NOTIFYICONDATA
     cbSize As Long
     hwnd As Long
     uID As Long
     uFlags As Long
     uCallbackMessage As Long
     hIcon As Long
     szTip As String * 64
    End Type
    '以下为 Shell_NotifyIcon将用到的常量
    Public Const NIF_ICON = &H2
    Public Const NIF_MESSAGE = &H1
    Public Const NIF_TIP = &H4
    Public Const NIM_ADD = &H0
    Public Const NIM_DELETE = &H2
    Public Const NIM_MODIFY = &H1
    'Shell_NotifyIcon的函数声明
    Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA"
    (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
   '处理消息将用到的结构、常量、API声明
    Type POINTAPI
     x As Long
     y As Long
    End Type
    Type Msg
     hwnd As Long
     message As Long
     wParam As Long
     lParam As Long
     time As Long
     pt As POINTAPI
    End Type
     Public Const WM_USER = &H400
  Public Const WM_RBUTTONDOWN = &H204
  Public Const WM_LBUTTONDBLCLK = &H203
    Public Const GWL_WNDPROC = -4
    Public trayflag As Boolean '定义托盘图标是否在桌面上
    Global lpPrevWndProc As Long
    Global gHW As Long
  Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
   '以下过程为消息循环处理
  Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   If hw = Form1.hwnd And uMsg = WM_USER+100 Then'检测到鼠标点动托盘图标
    Select Case lParam
      Case WM_RBUTTONDOWN '鼠标右键按下
     Form1.PopupMenu
【走近讲师】青云甘泉:混合云的构建及其对企业的帮助 RadiumOne创始人兼CEO因家暴被公司解雇 3D打印狂潮:可检测皮肤疾病的低价手机显微镜 浅谈导航设计,开发者必备的十大实用技巧 【云先锋 41】上海越诚:基于云服务的建站类iService软件超市 董西成:Hadoop将在高速发展和完善中扩大优势! 【走近讲师】 华云数据郁珉:公有云市场八仙过海 价格不是唯一标准! Facebook、Twitter、Google移动广告之争 开发者的黄金时代=运维人员的恶梦? 研发团队平稳度过“从小到大”并非易事 诺基亚品牌手机不久将消失 Stephen Elop回应不是木马 看七家科技公司Logo的最初模样 移动UI框架Fries:私人定制最Sexy的用户界面 必须Mark!最佳HTML5应用开发工具推荐 百度技术开放日感悟:看百度如何获取大数据时代的“船票” 谷歌亚马逊微软的烧钱游戏 拉手网CTO官冲:团购网在大数据应用上的探索 究竟谁真正关心比特币,不妨看看基于大数据的百万条推特分析 Firefox 29正式版:高度自定义模式、全新菜单和Australis UI 冼茂源:HBase在垂直搜索业务以及数据存储中的应用! 阿里云计算北京布点 全球第三个云数据中心开放 【走近讲师】友友天宇CEO姚宏宇:与行业结合是私有云厂商的重要出路 万亿移动支付产业的难点和痛点 削减硬件运营成本?亚马逊或自主研发ARM架构芯片 开源框架eMobc:XML开发原生移动应用so easy iOS应用安全开发,你不知道的那些事 市场化API的十个捷径 MongoDB和Cloudera结盟,欲征服大数据市场 红帽收购Inktank,将统一Gluster与Ceph? 那些巨头公司Logo是这么演变来的…… 以史为镜,剖析PaaS大迷局 权限问题 怎么用一控件去调用另一控件? 请教~~~~ Struts中的事件 如何在点击鼠标左键的时候,弹出一个弹出菜单? 求JBuilder8的下载地址,下完给分! Help!各位大俠,關于SQL查詢專業性的問題.....多多指教,在線送分! 两个菜鸟问题 急!急!急! 能不能用Socket类来实现广播,怎么实现发送和接收 为什么在98系统下Ado控件就不能用了,在线等! 关于在c++ builder中定义的类的编译时的问题 关于网络的简单问题 real media 插件哪里有急!! Tomcat连接池 请问一下哪里有Lotus5.11的下载啊! 怎樣使CrystalReportViewer里選擇打印機後可以預覽(200分) 怎么在一个控件中去调用另一个控件 小弟公司的项目用vss管理,请大家给小弟一个vss电子书好吗,大送分啊~~~~谢谢! MM求教各位 寻<<the c++ programming language>>中文电子版 请问各位,本人有C/C++的基础,学习C++ Builder 好学吗 请教关于Date 的一个问题 我在前台管理记录的时候误删除了几条记录,怎么样才能找回来 我在数据库里的记录是这样的,“ test",每行的前面有若干空格,为什么在网页上显示时,把我前面的空格给去掉了 [劲爆]关于小仙妹的秘密!雍亲王首次披露!!! 着急~~~~~~~~~~ 求crm开发方案一套!!! Bios改不了,哪位大佬帮帮忙? 对frame窗口传参的问题 寂寞如雪 (ocsdno) 新手问题~~很菜的~~大家指点下啊 asp.net 和asp 需要仿真可视化的文献资料,告知出处即可,十万火急!!! 怎么使用PL/SQL developer 导出所有用户表的数据成SQL语句? 版主 我门要是没分了 怎么办啊 怎么才能赚分啊 ODBC API 关于游标的问题~!100分 ?装完Oracle之后,登陆不了 一個關於路徑的問題?----郁悶----急!!!! 未将对象引用设置到对象的实例。 如何得到返回值呢? gps高手请进! 那位大侠能解释一下下面的一段代码 那位老大成功安装oracle8.1.7 for redhat9 ,1000分购买安装过程! 窗口重画的问题。 html页面中用<iframe></iframe>调用aspx页面,但打开的时候速度有点慢,不知是不是调用了aspx页面的关系 请问如何做一个锁定计算机的程序? ADO怎样把ACCESS数据表内容转存到Table中? 是系统问题吗? 一个有点难度的SQL语句问题 关于apache解析php的问题 在linux下调试perl,没有任何结果,是怎么回事? 2012年世界真的毁灭亡吗? 请问EVER`S是什么牌子 ever是什么意思 ·有知道hardly EVER'S这个牌子的吗?有牛仔迷吗?有知道hardly EVER'S这个牌子的吗?什么709,708, malpractice award 后花园的春天作文怎么写?必须要按时间顺序写 设a,b,c∈R.证明a²+ac+c²+3b(a+b+c)≥0并指出在什么条件下等号成立. coordination 和 cooperation这两个词有什么本质区别吗?在博弈论中,这两个词代表不同的博弈吗?可在博弈论中,同时存在coordination game 和 coopration game,都是两者之间的博弈,所以coordination也可以 coordination here coordination may be better than subordination 怎么翻译? 兴大道,民为本,立天下是什么意思 grain #4 mill finish 是什么工艺及注意事项! 杭州市委常委会专题研究三季度经济形势明治奶粉宣布撤出中国大陆市场韩国抗议日本“竹岛宣传片”日本自卫队逾3万人下月演练“夺岛”(韩国视宣传片为挑衅要日本删视频韩国议员获准访问开城工业园马来西亚一私立学校向金正恩颁发荣誉博中国周边外交发力 区域影响力再提升手机通信遭窥视?默克尔向奥巴马要说法巴基斯坦总理:赶快停止无人机空袭!肯尼迪刺客婚戒将拍卖素笔丹心张博研:辞职归乡救母亲高音丛中,一湾清流慰人心婴幼儿辅食不得分装生产日美军事同盟“异变”进行时大高玄殿今年有望对外开放法院执结一起3.4亿元标的案海军上将涉日本收买英国智库抹黑中国继续把优化营商环境作为首要任务希望日本就如何切实消除核泄漏事故影响山西女篮就邵婷微博提申诉狗狗的日记平装追女仔大码字哥传奇天字第一号酒道宿命之双生风魂液体操控者影子酒吧城头跑马飞雪残梦保俶塔旅游风波亭旅游沙孟海故居旅游长江源旅游扎西半岛旅游羊八井地热田旅游米堆冰川旅游雀儿山旅游丽江风景区旅游猫空旅游国父纪念馆旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘