2024年4月1日发(作者:)

本栏目责任编辑

闻翔军

数据库及信息管理

使用

PowerBuilder

编写系统托盘程序

周伟

王丰

九江学院信息技术中心

江西九江

332005

摘要

PowerBuilder

中应用

Win32API

函数编写系统托盘程序

PowerBuilder

应用程序最小化到系统托盘上

显示为它的图标

适用于暂时不使用或者暂时后台运行的情况

关键词

PowerBuilder

系统托盘

Win32API

中图分类号

TP311

文献标识码

文章编号

1009-3044(2007)10-20927-02

ProgrammingSystemTrayinPowerBuilder

ZHOUWei,WANGFeng

(InformationTechnologyCenter,JiujiangUniversity,JiuJiang332005,China)

Abstract:ProgrammingSystemTrayinPowerBuilderusingWin32APIfunction,minimizingthePowerBuilderapplicationtothesystem

trayanddisplayingasitsicon,whichisusefulforrunningtemporarilyorrunningtemporarilyinthebackground.

Keywords:PowerBuilder;SystemTray;Win32API

引言

使用

Windows

操作系统的用户都知道任务栏和系统托盘

们位于桌面的正下方

其中依次是开始菜单

快速启动栏

任务

系统托盘

任务栏中显示的是用户正在使用的程序

文件

系统托盘的目的就是将暂时不使用或者暂时后台运行的程序最

小化到系统托盘上

显示为它的图标

从而节省计算机资源

并且

可以使得桌面

任务栏更加地简洁

在需要使用或者前台运行时

用鼠标左键双击在系统托盘上对应的图标

转换为当前使用或者

前台运行

就像我们常用的聊天工具

QQ

一样

当我们登录后

显示主面

当用鼠标左键单击上面的隐藏按钮

它将最小化到系统托盘

显示为企鹅图标

当用鼠标双击该图标

又显示主面板

正常情况下的应用程序的主窗口

设计

PowerBuilder

实现系统托盘功能需要应用

Win32API

函数

取应用程序对应的可执行文件的路径

GetModuleFileNameA

提取

删除

该可执行文件的图标的句柄

ExtractIconA

在系统托盘上添加

该图标

Shell_NotifyIconA

打开该图标对应的应用程序窗口

OpenI-

con

销毁该图标

DestroyIcon

并且由于

Win32API

函数不是

PowerBuilder

的内部函数

所以在使用它们之前必须加以外部声明

根据实现系统托盘功能的特点

可将其分成

个阶段

各自

控制应用程序窗口的显示

open

事件向系统托盘添加应用程

序窗口对应的图标

resize

事件定义窗口最小化时即当

sizetype

参数为

隐藏应用程序窗口

只显示图标

pbm_custom01

事件定义鼠标左键双击图标的响应

lparam

参数为

WM_LBUTTONDBLCLK

恢复应用程序窗口的显示

close

件从系统托盘删除应用程序窗口对应的图标

下图

是按照

事件发生先后定义的事件流程图

这样我们在暂时不使用应用程序或者暂时后台运行应用程

序时

就可以可以隐藏其主窗口

在需要使用或者前台运行时

显示其主窗口

系统托盘上应用程序的主窗口对应的图标

实现

实例常量

3.1

声明本地外部函数

NotifyIconData

结构

定义

实例变量

按照事件发生先后定义的事件流程图

系统托盘达到的效果是如右图所示

其中右上图

是应

用程序的主窗口

它实现了很多的功能

是用户操作的界面

其中

右下图

是在窗口打开时

自动向系统托盘添加的窗口对应

的图标

当移动鼠标到该图标上

会出现提示

系统托盘程序

”。

当用鼠标左键单击窗口的最小化按钮

窗口将被隐藏

只显示托

盘上的图标

当用鼠标双击该图标

又显示该窗口

3.1.1

本地外部函数

functionlongGetModuleFileName(longhModule,refstringlp-

Filename,longnSize)library"kernel32"aliasfor"GetModuleFile-

NameA"

functionlongExtractIcon(longhInst,stringlpszExeFileName,long

nIconIndex)library"shell32"aliasfor"ExtractIconA"

functionintegerShell_NotifyIcon(longdwMessage,anylpData)

library"shell32"aliasfor"Shell_NotifyIconA"

functionlongSetForegroundWindow(longhwnd)library"user32"

functionlongOpenIcon(longhwnd)library"user32"

functionlongDestroyIcon(longhIcon)library"user32"

3.1.2

实例常量

constantlongNIM_ADD=0//

向系统托盘添加该图标

constantlongNIM_DELETE=2//

从系统托盘删除该图标

constantlongNIF_MESSAGEorNIF_ICONorNIF_TIP=7//

接收

消息

显示图标和提示

constantlongWM_NULL=0//

空消息

收稿日期

2007-03-23

作者简介

周伟

1981-

),

助教

毕业于山东大学计算机科学与技术专业

在职研究生就读

从事软件研发

王丰

1980-

),

助教

业于空军雷达学院计算机应用专业

在职研究生就读

从事网络工程

软件研发

927

数据库及信息管理

constantlongWM_LBUTTONDBLCLK=515//

鼠标左键双击

消息

本栏目责任编辑

闻翔军

i_nid.hIcon=i_hIcon//

图标的句柄

i_nid.szTip="

系统托盘程序

"+char(0)//

char(0)

结尾的提

示字符串

3.1.3NotifyIconData

结构

longcbSize//NotifyIconData

结构的长度

longhWnd//

窗口的句柄

longuID//

图标的

ID

longuFlags//

参数标识

longuCallbackMessage//

接收的

Windows

消息

longhIcon//

图标的句柄

stringszTip//

图标的提示

3.1.4

定义实例变量

longi_hIcon//

图标的句柄

NotifyIconDatai_nid//NotifyIconData

结构变量

3.2

定义窗口的

open

事件

stringfilename

longhandle

handle=handle(getapplication())//

获取应用程序的句柄

GetModuleFileName(handle,filename,255)//

获取应用程序对应

的可执行文件的路径

Shell_NotifyIcon(NIM_ADD,i_nid)//

向系统托盘添加图标

3.3

定义窗口的

resize

事件

ifsizetype=1thenthis.hide()//

隐藏当前窗口

3.4

自定义窗口事件

pbm_custom01

iflparam=WM_LBUTTONDBLCLKthen//

如果鼠标左键双击

图标

OpenIcon(handle(this))//

恢复当前窗口原来的大小和位置

this.show()//

显示当前窗口

SetForegroundWindow(handle(this))//

将当前窗口放到前台运行

endif

3.5

定义窗口的

close

事件

i_nid.uCallbackMessage=WM_NULL//

空消息

Shell_NotifyIcon(NIM_Delete,i_nid)//

从系统托盘删除图标

DestroyIcon(i_hIcon)//

销毁图标

i_hIcon=0

结论

本文介绍了在

PowerBuilder

中如何应用

Win32API

函数编写系

统托盘程序

以上提供的程序代码在

PowerBuilder10

中运行通过

i_hIcon=ExtractIcon(0,filename,0)//

提取该可执行文件的图

标的句柄

i_nid.cbSize=88//

定义

NotifyIconData

结构的长度

i_nid.hWnd=handle(this)//

当前窗口的句柄

i_nid.uID=0//

图标的

ID

显示图标和提示

i_nid.uFlags=7//

接收消息

i_nid.uCallbackMessage=WM_USER//

用户自定义消息

参考文献

[1]

马贵安

李明武

牛永生

等编著

.PowerBuilderWin32API

序设计

高级卷

[M].

清华大学出版社

2004.

[2]CharlesPetzold,

北京博彦科技发展有限公司

.Win-

dows

程序设计

[M].

北京大学出版社

2004.

的数据

使客户可以实时地在

IBM

DB2

还包括

IBMInformix

SQLServer

Oracle

Sybase

Teradata

只作为目标

数据库之间

复制数据

从而能够满足我们的业务需求

[4]

异构服务

heterogeneousser-(2)Oracle8i

数据库软件提供的

vices

)”

异构服务

是集成在

Oracle8i

数据库软件中的功能

它提

供了从

Oracle

数据库访问其他非

Oracle

数据库的通用技术

Or-

acle

数据库提供通过建立

DBLink

的方法访问非本地数据库

异构服务

提供通过建立

DBLink

使你能够执行

OracleSQL

透明地访问其他非

Oracle

数据库里的数据

就像访问

Oracle

远程数据库一样

。“

异构服务

分为两种

事务处理服务

TransationService

):

通过事务处理服务

使

用户在访问非

Oracle

数据库中支持事务处理功能

SQL

服务

通过

SQL

服务

使用户直接在

Oracle

数据库中

执行对非

Oracle

数据库的各种

SQL

语句

异构服务

连接方式可以分为透

根据异构服务代理程序的不同

,“

明网关和通用连接两种

透明网关

TransparentGateways

透明网关使用

Oracle

提供

的特定网关程序来设置代理

通用连接

GenericConnectivity

通用连接又分为

ODBC

接和

OLEDB

连接两种

其连接方法和透明网关没有本质区别

只不过通用连接是和数据库一起提供的功能

你不需要向

Oracle

购买相关的透明网关程序

上接第

917

工具

在结构关系上

ASP

是通过

ODBC

与数据库打交道

因此

可向上层兼容各类数据

另一种相似的动态网页技术

JSP

Sun

公司于

1999

年发

JSP

支持的是完全的

Java

可以充分发挥

Java

面向对象编程

的强大功能

可以使用

J2EE

标准服务

使用大量的

JavaAPI

JDBCAPI

(5)XML(ExtensibleMarkupLanguage)

技术

XML(

可扩展标记语言

是由

W3C(WorldWideWebConsor-

tium)

组织于

1998

月制定的一种通用语言规范

它是专门为

Web

应用程序而设计的

SGML

的简化子集

XML

最大的优点在于

它的数据描述和传送能力

具备很强的开放性

目前网上有很多

信息格式是半结构化或非结构化的

其来源极端异构

利用

XML

作为中间件对这些信息进行元数据搜索

提供一个统一界面的检

索系统是一个较好的应用方案

为了使基于

XML

的数据交换成

为可能

必须实现数据库的

XML

数据存取

并且将

XML

数据同

应用程序集成

进而使之同现有的规则和技术相结合

开发基于

动态数据交换等

的前提是所支

XML

动态应用

如动态信息发布

持的数据库必须能支持

XML

XML

提供描述不同类型数据的标

图形

声音等

并且可一致而正确地解

准格式

例如

数据库记录

管理和显示信息

几种数据库系统提供的异构数据库访问产品

(1)

利用

IBM

公司的

DB2InformationIntegrator

信息集成功能

实现异构数据库的访问

参考文献

[1]

周英飙

许蔚

异构数据库体系结构

[M]

2005.

[2]

黄镝

异构数据库的跨库检索技术综述

[M].

图书情报工作

2003

,(

[3]

刘允杰

Oracle

数据库中连接异种数据源

[M],2005.

[4]KulvirSinghBhogal,IBMSoftwareServicesforWebSphere,

Austin,TX&SridharReddyVarakala,

研究生

UniversityofTexasatAr-

lington.

Oracle9i

一起使用

DB2InformationIntegrator

简介

,2003.

DB2InformationIntegrator

IBM

公司用于信息整合的软件

系统

该系统提供联合数据查询功能

允许客户对

DB2

和其它关

系和非关系数据库中客户最新数据的直接访问

为多个来自不同

供应商的异构数据库提供单一的应用程序接口

DB2InformationIntegrator

通过一个用于混合关系数据库

的联邦数据服务器

将异构数据库包装为

DB2

联邦数据库对象

使用一个视图

使我们能够实时合并来自

DB2

和其它数据库表

928

电脑知识与技术