您正在看的Powerbuilder教程是:在PB中调用外部程序并判断其运行结束
在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息 如我们要备份Adaptive Server Anywhere 数据库 在备份结束后显示 备份完成! 的提示信息 如果在调用备份程序dbbackup后马上用messagebox显示提示信息 那么程序运行时则会出现这种情况 dbbackup备份程序还在运行 备份完成! 的提示就已经显示了 显然不符合我们的设想 对于这种情况 我们可以借助API函数FindWindowA() IsWindow()和PB本身函数yield()来解决
声明API函数
Function long FindWindowA (String lpClassName String lpWindowName ) Library user dll Function boolean IsWindow (Long hwnd ) Library user dll调用
ulong ll_handle int li_loop
SetPointer(HourGlass!) //设置鼠标指针 //运行备份数据库程序dbbackup 并使其最小化 run( dbbackup c ~ uid=dbapwd=sqldbf=D:\Sybase\Adaptive Server Anywhere \asademo db~ d:\backup Minimized!)
lishixinzhi/Article/program/PB/201311/24551
位 *** 作系统中 可以用两种方法实现
首先在global external functions声明外部函数如下
FUNCTION long FindWindowA( ulong Winhandle string wintitle ) Library ″user ″
然后在application的 Open 事件中加入如下代码
ulong l_handle lu_class
string ls_name
ls_name = ″我的系统″ // 此处ls_name为系统主窗口的标题Title
l_handle = FindWindowA(lu_class ls_name)
if l_handle >then
MessageBox(″提示信息″ ″应用程序″ + This AppName + ″已经运行 不能多次启动!″)
Halt Close
else
open(w_main) // 此处为系统主窗口
end if
这种方法是PowerBuilder联机帮助中的一个例子 是以系统主窗口的标题Title作为判别依据 若有其它与此Title同名应用程序在运行 再想启动此程序也会报应用程序已经运行 你可以将Title设为 计算器 然后启动Windows附件中计算器程序 再运行你的PB应用程序试试
声明外部函数
function ulong CreateMutexA (ulong lpMutexAttributes int bInitialOwner ref string lpName) library ″kernel dll″
function ulong GetLastError () library ″kernel dll″
然后在application的 Open 事件中加入如下代码
ulong ll_mutex ll_err
string ls_mutex_name
if handle (GetApplication () false) <>then
ls_mutex_name = this AppName + char ( )
ll_mutex = CreateMutexA ( ls_mutex_name)
ll_err = GetLastError ()
if ll_err = then
// 程序已经运行
MessageBox (″提示信息″ ″程序已经运行了!″)
Halt close
else
// 程序未运行
open(w_main)
end if
else //开发模式
open(w_main)
end if
这种方法必须在应用程序编译成可执行文件 exe后才有效
编辑推荐
ASP NET开发培训视频教程
lishixinzhi/Article/program/PB/201311/24617
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)