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

用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
七款Debug工具推荐:iOS开发必备的调试利器 六年亲历,见证中国大数据技术与应用时代的到来 Mailbox:日支撑过亿信息数据库的性能调优及集群迁移 PayPal前CTO 在美国改变世界的乌克兰犹太人 放弃Bootstrap&Foundation,迎接Semantic UI? 一键分享:iOS版Google+发布SDK InMobi杨娟:中国移动游戏如何挑战全球? Adobe再遭APT攻击:数十G源代码及290万用户信息失窃 程序员,如何在工作中崭露头角? 国内外三个不同领域巨头分享的Redis实战经验及使用场景 这是一场潜在的战争:谷歌与Facebook、苹果在搜索上的博弈 设计新闻类网站需要注意的关键点:移动友好、宽带…… 直接开始用:5个免费的在线思维组织工具 招聘开发者常见的九大误区 开源影响销售,维护赞助商? 盘点黑客攻击途径:最常用的7个策略及简单的防护方法 专访AngularJS框架创始人Misko Hevery:让Web开发更便捷 果粉的又一个节日:新iPad或于10月22日发布 新车间李大维:到集装箱里来看创客嘉年华 亚马逊推“登录与支付”功能 直接冲击PayPal Google编程之夏新里程碑:5000万行源代码 8500名学生开发者 非常实用的15款开源PHP类库 Runnable:一站式代码片段服务平台,打造编程界的YouTube 谷歌向所有开发者开放Google App Engine PHP Runtime “沟通”电子表格和矢量图形的“桥梁”:在线可视化工具Raw Facebook北极圈数据中心,Open Compute Project的力作! 最后三天!4折抢购2013移动开发者大会门票 电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? NOTES在用久了之后,邮箱会变的巨大,几百MB,但即使我将邮件删除,其邮件文件还是那么大,怎么可以让它缩小? 我为程序中的职工设了一个序号,人数有多少序号就有多少。可以一眼就看出有多少人。可是当我在离职表中删除职工时。序号跟着被删除。删除 关于sql的难题。 请问如何用SQL语句更改一个表的字段长度,其他都不变. jsp读取oracle8.1.6数据表中的中文,读出为?,着急啊。 上个100帖子已结,现在再拿100分求从导入到数据库的代码,各位老大帮忙看看。 怎样用程序设置文件夹共享? VB中,怎样实现C中的continue? 注册表与记录登录密码 更新表中某字段的值 请问如何实现像delphi编辑器那样,当输入了关键字后会变成粗体或其它的颜色? 有人需要Delphi调用水晶报表的例子吗? 关于ADO+SQL Server2000数据库备份的问题! vb.net应用程序! SQL语句问题 有关位图的问题? 如何从扫描仪中读图,欢迎讨论 这个问题难者不会,会者不难! 如何把自制的ActiveX打包成*.cab包放在网页上 ? 关于DeleteTable方法 备份数据库时出现42000错误:"d:\backup\20021115.mdfIO"发生不要恢复错误,backup被中止,救命啊,谢谢!!! An very easy problem! vb.net简单的问题。 怎么用Linux 下的C/C++开发一个窗口,人人有分! delphi7怎么注册? 请问:VB中如何实现Crystal Report打印? VB可以使用MySQL数据库吗? libc stdio中fgets的疑问! 还是文档拷贝问题,原文档中的RTF域怎么拷贝到另一数据库中的新文档中。 请估价开发一个b/s结构的桥牌网站 关于名字空间namespace.散分了!! 文件上传,急!! 初学者问题之数据库连接--有点急 http://CDNA.8q8.net/受到黑客攻击,请发表意见 兄弟们,请问在win2k下,怎么实现在exe文件加上自己的一段代码,给点思路? “好的” 接分! 有关闭包问题,在线求解! 如何在Datagrid中实现交叉表? 我想请问一下,在SQL_SERVER中,可不可以发送URL啊,可以的话怎么写法?谢谢! VB 编程发 Lotus Notes 邮件。(200分) 请问使用sql2000 for jdbc连接sql7的问题 请估价一个bs结构的桥牌游戏网站 IIS以及SSL代理的简单问题!急急急急!来者有分!!! 如何把24和32位图的文件保存为2色位图? 请问一下用winsock怎样绑定两块网卡? 请估价一个bs结构的桥牌游戏网站。 如何在win2000/xp上限制内网用户上网的带宽? 硬盘不知是什么问题! 如何用asp创建exchange用户邮箱地址: 一个人在北京好孤独。 如何知道 DataGrid水平滚动条的位置(值) 怎样描写快乐有趣瞬间的诗句? 左车右并 念什么字 化学配制稀硫酸 误差分析下面是用98%的浓H2SO4(ρ=1.84g/cm3)配制成0.5mol/L的稀H2SO4 500mL的操作,请按要求填空:误差分析:请用“偏高”“偏低”或“无影响”进行填空① 定容时,观察液面俯视 根据意思写出词语,快乐有趣的活动 左“车”右“月”是什么字 化学中0.2N稀硫酸如何配制 我的名字与“唯一”谐音,想找个合适的英文名.与“唯一”谐音,或者有“唯一”的意思的名字 麻烦要x的平方-y的平方+x的三方-y三平方的因式分解.谢谢 英文名的构成英文名往往很长,像 J K 罗林,那些大写字母表示啥意思,还有顺序有什么讲究,希望答案能讲得通俗些,不要粘贴大段文字. 请问这些交通标志各是什么意思? 分解因式X三次+X二次-Y三次-Y方 最正规英文名字我的英文名字叫CHRISTINA 我姓范为什么有的英文名字是类似这样的:Joe.Denis.Fred(乔.丹尼斯.弗瑞德)我也想取类似的PS 为什么Joe.Denis.Fred有2个名字?我也可以有2个吗?比如:Fan.Chr 下面这个交通标志是什么意思 因式分解 x方(x-y)(y-x) 帮我组成个英文名字同上,名字要有内涵,四到五个字符,最好是翻译是励志的,或者组合起来看起来顺眼,是网名,不要人名, 看图写话,求大师帮帮忙,一定有好评,九十个字以上 分解因式(x+y)方+4(x-y)方-4(x方-y方) “有性格的男孩”英文怎么说? 二年级看图写话,最少100个字 导盲犬、导盲犬导盲犬在主人要过马路的时候会这么样、【这么帮助主人的】导盲犬在主人要上楼梯的时候会这么样、有车子的时候会这么样、下车时、导盲犬会这么样、【反正就是导盲犬 把‘我的性格有点像男生’翻译成英语 英语翻译嗯,翻译下《HONEY》,《GIRLS'GENERATION》,《BABY BABY》,《KISSING YOU》的中文意思.因为真的很好听,你们也可以去听听看喔! “导盲犬”是什么意思? 请问品质男人用英文怎么写? 英语翻译不要罗马音译的 导盲犬是什么狗 心理分析小说 英语怎么说? 老师介绍了许多雷锋的事迹.(修改病句) 导盲犬是什么狗呢? 红外/微波双鉴探测器不能布防怎么解决 修改病句:课堂上,老师给我们介绍了许多敦煌壁画的故事. 导盲犬与主人的故事说明了什么道理呢 硫酸铵是常见的一种化肥, from where 和from which的区别 谁能推荐一些经典的英文歌曲?要抒情点的. 什么叫有机化肥,主要成分是什么(化学式) 我借的达州的书是山东版的,遂宁也是吗? 《小英雄雨来》塑造了雨来小英雄的事迹.修改病句 性格弱点的英文怎么讲 如图,英语完形填空 【-2(x-y)的平方】×(y-x)的3方 青蛙的英语简介用英语说的哦!就是介绍青蛙!可以的话在介绍下大象!谢谢! 实践活动课上李老师请张小华到前面讲阿凡提巧斗财主的故事修改病句 y=负(x-1)的平方+3的顶点坐标为 微波探测、红外探测器、热能探测、激光探测、声波探测这些知识都摘给我看看!请说 求文档:改病句:在实践活动课上,老师请李明讲“丑小鸭”的故事.因为李明嗓子有些嘶哑 小学一年级语文看图写话谁帮帮我? 红外探测器属于哪种入侵探测器 我叫做语萱,我想要一个能和我的名字在含义或听起来有联系差不多的英文名.不要太长的英文名,一般就可以了. 帮忙起个R开头的英文名,谐音的,急!我叫罗雨,帮个忙! 用正确的人称代词或物主代词填空Once upon a time there was a girl called Little Red Riding Hood.Together with (she) ___________1 mum,(she) ____________2 lived in a big forest.One fine day,the mother said,“(You) ___________ 3 grandma is 我的名字是彭银妮,想取一个英文名,谐音比较接近我的名字,好听,好记,字母少,含义好,不多见的, 我的名字“徐艳”,想取个谐音的英文名!D开头的也好的!最好是D开头,又谐音!谢啦……不要贴个长篇大论上来!我看多了!有谁能自创一个特别的!因为我英文不是特别好,拼不来 根据汉语提示,用正确的人称代词及物主代词填空!1._____(我)can't find_____(我的)pen.Where is_____(我的)pen?2.Jim can't find_____(他的)bike?____(它)is a black bike.3.DO_____(你)have a bike?What color is( )你的bike?Is( )它b 推荐几首比较抒情英文歌曲类似这首的音乐 一年级语文课本看图说话66页哪座房子最漂亮 为什么说抗日战争的胜利是“我中华民族百年来未有的大事” 哪位朋友推荐一部哲学入门的书籍 用修改符号修改病句,指南针是我国的四大发明 高中语法英语填空题,Professor Smith,along with his assistants,_____ on the project day and night to meet the deadline.答案空中应填 is working 为什么?is working算什么成分?如果是非谓语应该填 working呀.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘