怎样在PB中调用外部程序并判断其运行结束

合集下载

pb中 shellexecute用法

pb中 shellexecute用法

pb中shellexecute用法在PowerBuilder(PB)中,ShellExecute函数通常用于启动外部应用程序或打开文件,它会调用操作系统的默认关联程序打开指定的文件或运行指定的可执行文件。

以下是ShellExecute函数的基本用法:integer li_return// 定义ShellExecute函数的原型FUNCTION ulong ShellExecute (uint hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, uint nShowCmd) LIBRARY "shell32.dll"// 示例用法li_return = ShellExecute(0, "open", "C:\Path\To\Your\File.txt", "", "", 1)IF li_return < 32 THENMessageBox("Error", "Failed to open file. Error code: " + String(li_return), StopSign!)END IF上述代码中,ShellExecute函数接受以下参数:•hwnd: 父窗口的句柄,通常可以设置为0,表示没有父窗口。

•lpOperation: 指定要执行的操作,常用的是"open"。

•lpFile: 指定要打开的文件的路径。

•lpParameters: 指定传递给应用程序的参数,通常为空字符串。

•lpDirectory: 指定启动应用程序时的工作目录,通常为空字符串。

•nShowCmd: 指定窗口的显示方式,常用的是1 表示显示正常。

pb中窗口的打开和关闭

pb中窗口的打开和关闭

pb中窗口的打开和关闭pb中窗口的打开和关闭Close()功能关闭窗口并释放窗口以及窗口上的控件所占据的内存。

语法Close(windowname)参数windowname:要关闭窗口的名称返回值Integer。

函数执行成功时返回1,发生错误时返回-1。

如果参数windowname的值为NULL,Close()函数返回NULL。

用法应用程序使用Open()或其它Open簇函数打开窗口后,不需要窗口时,可以使用Close()关闭窗口并释放窗口以及窗口上所有控件占据的内存。

Close()函数的执行过程为:如果要关闭窗口的CloseQuery和/或Close事件已经编写了事件处理程序,那么执行这些事件处理程序,从屏幕上删除要关闭的窗口、关闭窗口、之后执行调用Close()函数语句后面的语句。

当窗口被关闭后,应用程序就不能再访问已经关闭窗口的属性、实例变量、对象函数、以及窗口上的控件了。

如果关闭窗口后应用程序依然访问上述特性,那么将引发运行错误。

当然,应用程序也可以阻止窗口被关闭,方法很简单,只要在欲阻止关闭窗口的CloseQuery事件处理程序中使用RETURN语句返回1即可,格式为:RETURN1 CloseWithReturn()功能关闭窗口并将返回值保存在Message对象中,该函数只能对响应窗口使用。

语法CloseWithReturn(windowname,returnvalue)参数windowname:要关闭窗口的名称returnvalue:指定关闭窗口时保存到Message对象中的值,调用CloseWithReturn()函数的代码段通过查看Message对象属性的值得到关闭窗口时被关闭窗口传递的值。

returnvalue参数必须是下述三种类型之一:String、Numeric、PowerObject返回值Integer。

函数执行成功时返回1,发生错误时返回-1。

如果参数任何的值为NULL,CloseWithReturn()函数返回NULL。

PB中dynamic调用类型的用法

PB中dynamic调用类型的用法

PB中dynamic调用类型的用法PB中dynamic调用类型的用法说到DYNAMIC调用类型,我们先看看对象、属性、函数和事件的引用方法:应用程序的开发过程实际上就是各种对象的定义和使用过程。

所有对象都有名称,并通过名称相互区分。

访问对象的属性、函数、事件的方法很简单,就是使用圆点作为标记符,具体来说,访问对象属性的格式为:对象名.对象属性例如,把单行编辑框sle_name的用户输入内容送到字符串变量UserEnter的语句可以写成:UserEnter=sle_name.Text其中,sle_name是一个单行编辑框对象的名称,Text是单行编辑框的Text属性。

程序中访问对象的函数与事件的格式为:{ objectname.} { type } { calltype } { when } functionname ( { argumentlist } )其中,大括号所括成分根据情况可以省略,各成分的意义为:objectname是对象名;type取值为FUNCTION或EVENT,用于指明访问函数还是事件,缺省值为FUNCTION;calltype用于指明PowerBuilder 查找函数的时机,有效取值为:STATIC(缺省值):编译时查找函数,若不存在,产生编译错误DYNAMIC:程序运行时查找函数,若不存在,产生运行错误when用于指明函数或事件是立即执行呢还是当前程序段执行完毕后执行,取值为:TRIGGER(缺省值):立即执行POST:当前程序段执行完毕后执行functionname指明调用的函数或事件名称argumentlist给出函数或事件的参数例如,想把输入焦点移动到单行编辑框sle_name上,程序中写上语句:sle_name.SetFocus()即可。

想立即执行按钮cb_name的单击事件处理程序,那么写上语句:cb_name .EVENT TRIGGER Clicked ()即可。

pb停止代码函数

pb停止代码函数

pb停止代码函数
以下是一个简单的Python示例,使用os模块来停止一个进程:
Python:
import os
import signal
def stop_process(pid):
try:
os.kill(pid, signal.SIGTERM)
except OSError:
print("Process not found")
# 使用函数停止进程
stop_process(1234) # 这里的1234是你要停止的进程的PID
在这个例子中,我们使用os.kill函数发送一个SIGTERM 信号给指定的进程。

这个信号告诉进程应该停止运行。

如果进程不响应这个信号,我们可以发送SIGKILL信号来强制结束它。

但是,请注意,使用SIGKILL会立即终止进程,而不会给它机会进行清理或保存状态。

另外,不同的操作系统和编程语言可能有不同的方式来停止进程。

例如,在Java中,你可能需要使用Runtime.getRuntime().exec("kill " + pid)。

在C++中,你可能需要使用kill函数。

所以,具体的实现方式取决于你的需求和使用的技术栈。

在PB中实现多平台统一的API调用

在PB中实现多平台统一的API调用

在PB中实现多平台统一的API调用(深圳:独孤求败 2003-05-27)---- 一.问题的提出:---- 我们知道,PB是一个支持多平台的软件开发工具。

它主要用于C/S应用程序的客户端软件开发。

PB 支持用户在不同的平台上创建应用程序。

而PB的API(Aplication Program Interface)调用是指PB能够利用其所挂的操作平台所提供的函数来完成某些功能。

由于PB能应用在不同的平台上,因此随平台环境的不同。

PB的API调用形式也因此不同。

这就涉及到如何在PB的应用程序中开发出独立于操作系统的统一的API调用以保证不管实际的API函数调用是什么,都能为应用程序编写出一致的界面。

---- 二.解决问题的方法:---- 用PB提供的非可视化定制类用户对象,使用继承,封装和重载的手段就能解决上述问题。

具体地说,就是在应用程序中建立一个祖先类用户对象(基类),该祖先对象是一个非可视化定制类用户对象,在祖先类用户对象中封装能为每个环境定义的全部函数(这些函数是原型化的用户对象函数而不是外部声明的函数)。

在祖先类用户对象中封装的函数不完成任何工作(即不完成任何功能,定义为虚函数)。

具体的函数(即实际的对不同的操作系统的API调用)附加于祖先类用户对象的后代类用户对象中。

即在后代类用户对象中重载祖先类用户对象中的所有函数,在后代类用户对象中进行API调用的实际外部函数声明和调用。

每一个后代类用户对象对应于一个操作系统。

在应用程序对象的open事件的script中,用PB提供的GetEnvirnment()函数查询应用程序的环境以判断当前应用程序运行于哪一种操作系统中,将用祖先类用户对象声明的实例变量实例化为对应的操作系统所相应的后代类用户对象的实例。

以便在运行时根据实例变量所具体实例化的类型来决定调用哪一个后代类用户对象中相应的函数(类的多态性)。

---- 三.举例说明:---- 下面以一个简单的例子说明如何在PB中实现多平台统一的API调用。

pb停止代码函数

pb停止代码函数

pb停止代码函数在Python中,可以使用以下几种方法来停止程序的执行:1. 使用`sys.exit(`函数:```pythonimport sysdef stop_program(:sys.exit```2. 使用`os._exit(`函数:```pythonimport osdef stop_program(:os._exit(0)```3. 抛出`SystemExit`异常:```pythondef stop_program(:raise SystemExit```4. 使用`signal`模块来设置信号处理函数,例如`signal.signal(signal.SIGINT, handler)`,其中`SIGINT`是中断信号`Ctrl+C`的默认信号:```pythonimport signaldef handler(signum, frame):print("Program stopped")sys.exitdef stop_program(:signal.signal(signal.SIGINT, handler)```5.使用全局布尔变量控制程序执行:```pythonis_program_running = Truedef stop_program(:global is_program_runningis_program_running = Falsedef program(:while is_program_running:#代码逻辑```6. 在多线程或多进程环境下,使用`threading`或`multiprocessing`模块来控制线程或进程的执行:```pythonimport threadingdef stop_program(:threading.current_thread(.stop( # 停止当前线程```以上是一些常见的停止程序执行的方法,选择哪种方法取决于你的具体需求和程序的结构。

pb try except 用法

pb try except 用法

序号一:介绍try except语句的作用在Python编程中,try except语句是一种异常处理机制,用于捕获和处理程序运行过程中可能出现的异常情况。

当程序执行try语句块时,如果遇到异常,就会跳转到对应的except语句块进行处理,避免程序因异常而中断,提高程序的稳定性和可靠性。

序号二:try except语句的基本语法try:#需要被监控的代码块#如果出现异常,将跳转到对应的except语句块except 异常类型1:#处理异常情况1的代码块except 异常类型2:#处理异常情况2的代码块...序号三:try except语句的使用示例下面通过一个简单的示例来演示try except语句的基本用法:```pythontry:x = 10 / 0 #这里的操作会引发ZeroDivisionError异常except ZeroDivisionError:print("除数不能为0!")```在这个例子中,当程序执行到10/0时,会出现ZeroDivisionError异常,程序会跳转到对应的except语句块执行,输出"除数不能为0!"这句话,而不会使程序崩溃。

序号四:try except语句的应用场景try except语句在很多场景下都有着重要的作用。

比如在文件读写、网络请求、数据库操作等涉及到外部资源的操作中,可能会出现各种异常情况,使用try except语句可以有效地捕获和处理这些异常,提高程序的稳定性和健壮性。

序号五:多个except语句的嵌套使用除了基本的try except语句外,还可以在except语句块中嵌套多个except语句,用来处理多种不同类型的异常情况。

例如:```pythontry:f = open('test.txt', 'r')f.write("Hello, World!")except FileNotFoundError:print("文件不存在!")except IOError:print("文件读写错误!")```在这个例子中,如果打开文件发生FileNotFoundError异常,会执行第一个except语句块;如果文件读写出现IOError异常,则会执行第二个except语句块。

PB调用各类WebService或c#程序

PB调用各类WebService或c#程序

PB调用各类WebService或c#程序慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。

但是pb只能调用最基础的c++开发的标准dll。

通过无数次的百度,我找到了一个好的方法,也许您已经知道了。

但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。

谢谢!方法思路是:1、用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。

在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。

2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;namespace ysxt{public class ws{public string sendrecv(string sUser, string sPwd){string retu = "";try{xjca.YsxtMainServiceImplService myrefe = new xjca.YsxtMainServiceImplService(); //这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注myrefe.Url = myUrl;retu = myrefe.sendRecv(sUser, sPwd);}catch (Exception e){return e.Message;//一定要用try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

pb中调用api -回复

pb中调用api -回复

pb中调用api -回复如何在PB中调用API?借助API(即应用程序接口),我们可以在不同的软件应用之间实现数据和功能的交互。

而在PB(PowerBuilder)中调用API可以帮助我们实现与操作系统、外部应用程序以及服务的集成。

在本文中,我们将一步一步地介绍如何在PB中调用API。

第一步:准备工作在开始之前,我们需要确保PB已经安装在我们的开发环境中。

另外,我们还需要明确我们希望调用的API以及其所需的参数和返回值。

这些信息通常可以在API的官方文档或者开发者指南中找到。

一旦我们获得了这些信息,我们就可以开始进行下一步。

第二步:在PB中声明API函数在PB中,我们需要在Global External Function表中声明我们希望调用的API函数。

在PowerBuilder的开发界面中,我们可以找到该表,并在其中添加一行来声明我们的API函数。

在这个声明中,我们需要指定函数的返回类型、函数名以及函数的参数列表。

这些信息是根据API的文档来确定的。

在声明函数时,我们还需要注意将API函数的名称和参数名与PB中已有的函数和变量区分开来,通常可以通过在名称前面或者后面添加前缀或后缀来实现。

第三步:调用API函数一旦我们在PB中声明了API函数,我们就可以在代码中调用这些函数了。

我们可以在PB的脚本编辑器中添加相关的代码来调用API函数。

在调用函数之前,我们需要确保我们的输入参数和输出参数的类型以及顺序都与API的要求一致。

在调用API函数时,我们可以使用PB中提供的各种数据类型和变量来存储和传递参数。

这些可以是整数、字符串、浮点数等。

我们还可以根据需要使用其他PB的特性来对API函数进行封装,以简化调用的过程。

第四步:处理返回值和错误每个API函数都有自己的返回值和错误处理方式。

在调用API函数后,我们可以检查其返回值来确定是否调用成功。

根据API的报告,一般情况下,如果返回值为0表示调用成功,而其他的返回值则表示出现了错误。

PB中程序的错误和异常处理方法

PB中程序的错误和异常处理方法

PB程序中的错误处理方法PB开发中常会用到一些对错误的处理方法,根据错误的不同,处理方式也不相同。

常见的几种错误有系统级错误、数据库错误、数据窗口语法错误等。

1)系统级错误可以通过systemerror事件;2)数据库错误如果使用嵌入SQL可以通过Transcation属性获得,如果是数据窗口或数据存储可以通过dberror事件获得(要处理数据存储的错误捕捉必须通过继承实现);3)数据窗口语法错误,例如在DataWindow中使用SetFilter和Find函数时如语法错误就会自动弹出语法错误的提示信息,对于此类错误,可以改用DataStore来处理,因为DataStore使用SetFilter和Find函数时语法错误不会自动弹出而是返回-1。

以上几种方法都是对一些可以预知的错误的处理,实际开发中还会遇到很多不可预知的情况,会使程序错误,严重的使系统崩溃,停止运行。

例如,调用外部控件读取设备的信息,会有很多无法预知的错误,导致程序崩溃。

为防止不可预知的异常情况,避免系统崩溃,PB9中提供了处理此类异常的方法:TRY...CATCH...FINALLY...END TRY,其语法规则如下:TRYtrystatements //这里写自己的程序语法段CATCH ( ThrowableType1 exIdentifier1 )catchstatements1 //发生ThrowableType1异常时的程序处理CATCH ( ThrowableType2 exIdentifier2 )catchstatements2 //发生ThrowableType2异常时的程序处理...CATCH ( ThrowableTypeN exIdentifierN )catchstatementsN //发生ThrowableTypeN异常时的程序处理FINALLYcleanupstatements //不论异常发生与否,一定执行的语句放在此处,没有可以不要END TRY下面是一个简单的例子,供参考:Oleobject lo_connectlo_connect = create oleobjectli_rtn = lo_connect.ConnectToNewObject("ADODB.Connection")//lo_connect.ConnectionString=ls_connstringif li_rtn<0 then//error//-1 Invalid Call: the argument is the Object property of a control //-2 Class name not found//-3 Object could not be created//-4 Could not connect to object//-9 Other errorelsetrylo_connect.CursorLocation = 3lo_connect.ConnectionTimeout = 20lo_connect.open(ls_connstring)catch (runtimeerror err)// runtimeerror 运行时异常的处理catch (throwable err1)//其他异常的处理ls_err=err1.classname()+','+err1.GetMessage()if isnull(ls_err) then ls_err=''//messagebox("提示","连接异常!"+"~r~n"+ls_err)st_status.text="连接异常!"+"~r~n"+ls_errreturnend try。

PB调用外部DLL经验

PB调用外部DLL经验

先声明外部函数例function int CVR_InitComm(int Port) Library "termb.dll" //初始化连接; function int CVR_Authenticate() Library "termb.dll" //卡认证;function int CVR_Read_Content(int active) Library "termb.dll" //读卡操作。

function int CVR_CloseComm() Library "termb.dll" //关闭连接注:但外部函数是带指针类型时如1.读各项文字信息到自定义内存缓冲原型:int GetPeopleName(char *strTmp, int *strLen) //得到姓名信息int GetPeopleSex(char *strTmp, int *strLen) //得到性别信息int GetPeopleNation(char *strTmp, int *strLen) //得到民族信息int GetPeopleBirthday(char *strTmp, int *strLen) //得到出生日期那么声明为function Int GetPeopleName(ref string lpReturnedString, ref long nReturnLen) Library "termb.dll" Alias for 'GetPeopleName;ansi' //得到姓名信息function int GetPeopleSex(ref string lpReturnedString, ref long nReturnLen) Library "termb.dll" Alias for 'GetPeopleSex;ansi' //得到性别信息添加REF 为指针同时注意 C C#中的INT 和CHAR 在 PB 中应转为STRING longAlias for 'GetPeopleSex;ansi' 为了避免乱码调用函数为string lpReturnedStringlong nReturnLenint nReturnlpReturnedString = Space(255)//对于指针应先分配空间再进行赋值nReturn=GetPeopleSex( lpReturnedString, nReturnLen) messagebox('',lpReturnedString)messagebox('',nReturn)st_2.text=string( lpReturnedString)。

怎样在PB中调用外部程序并判断其运行结束

怎样在PB中调用外部程序并判断其运行结束

怎样在PB中调用外部程序并判断其运行结束?育龙网 WWW.CHINA-B.C0M 2009年08月31日来源:互联网育龙网核心提示:在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息。

如我们要备份Adaptive Server Anywhere 6.0数据库,在备份结束后显在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息。

如我们要备份Adaptive Server Anywhere 6.0数据库,在备份结束后显示"备份完成!"的提示信息,如果在调用备份程序dbbackup后马上用messagebox显示提示信息,那么程序运行时则会出现这种情况: dbbackup备份程序还在运行,"备份完成!"的提示就已经显示了,显然不符合我们的设想。

对于这种情况,我们可以借助API函数FindWindowA()、IsWindow()和PB本身函数yield()来解决。

声明API函数:Function long FindWindowA (String lpClassName , String lpWindowName ) Library"user32.dll"Function boolean IsWindow (Long hwnd ) Library "user32.dll"调用:ulong ll_handleint li_loopSetPointer(HourGlass!) //设置鼠标指针//运行备份数据库程序dbbackup,并使其最小化run("dbbackup -c ~"uid=dba;pwd=sql; dbf=D:“Sybase“Adaptive Server Anywhere6.0“asademo.db~" d:“backup", Minimized!)ll_handle = 0//循环至dbbackup窗口打开Do While ll_handle = 0ll_handle = FindWindowA("tty","dbbackup")yield() //loop//等待dbbackup窗口关闭Do While isWindow(ll_handle)Yield()Loop//应用执行完成MessageBox("提示信息", "备份完成!")。

PB获取某个应用是否正在运行

PB获取某个应用是否正在运行

首先声明下列localexternal函数Functionuint GetModuleHandle(stringModuleName)Library"kernel"Functionuint GetModuleUsage(uintModuleName)Library"kernel"Functionuint FindExecutable(stringFileName,REF stringDirectory,REF stringResult)Library"shell"键入下面的一个窗口级函数:fw_check_app_status//返回:boolean//参数://string as_filename//string as_directoryinteger li_size=144,li_resultstring ls_executable=Space(li_size)integer li_module_usageuint li_module_handleli_result=FindExecutable(as_filename,as_directory,ls_executable)IF li_result<32 THEN ReturnFALSE//如可执行文件已载入,获取这个执行文件的句柄li_module_handle=GetModuleHandle(ls_executable)IF li_module_handle<1THEN//没有载入Return FALSEELSE//获取有多少个实例被载入li_module_usage=GetModuleUsage(li_module_handle)ReturnTRUEEND IF工作原理这段程序可以获取某个应用是否正在运行。

我们用windowsAPI中的GetModueHandle函数来判定是否另一个应用正在运行。

在PB中动态调用函数

在PB中动态调用函数

在PB中动态调用函数目前流行的大部分应用程序中都提供了Undo功能,在PB中也可以利用Undo()函数实现该功能。

Undo()函数可用于DataWindow, EditMask, MultiLineEdit, RichTextEdit和SingleLineEdit 对象,如果只对某一个对象进行Undo操作,只需在Undo菜单项的单击事件中键入如下脚本:Objectname.undo(),但是当窗口中有多个对象,我们在编写脚本时并不知道要对哪个对象执行undo()操作,如何解决这一问题呢?在PowerBuilder中,undo()等函数只能用于可视对象,而所有可视对象均继承自系统对象类GraphicObject。

因此我们可以定义一个GraphicObject对象的实例变量go_object,等到运行时再用getfocus()函数确定具体操作对象。

然后用Typeof()函数确定当前对象的类型,再用Choose case语句根据不同的类型引用不同的实例变量,代码如下:graphicobject go_objectDataWindow dw_objectEditMask em_objectMultiLineEdit mle_objectRichTextEdit rte_objectSingleLineEdit sle_objectgo_object=getfocus()choose case TypeOf(go_object)case DataWindow!dw_object=go_objectdw_object.undo()case EditMask!em_object=go_objectem_object.undo()case MultiLineEdit!mle_object=go_objectmle_object.undo()case RichTextEdit!rte_object=go_objectrte_object.undo()case SingleLineEdit!sle_object=go_objectsle_object.undo()case elsemessagebox("Error","Can not undo")end choose其实我们可以用动态调用函数的方法简单地解决这一问题(只需三行代码),即对GraphicObject对象调用undo()函数,然后在函数名前加上关键字Dynamic。

pb调用java程序

pb调用java程序

pb调用java程序当使用 PowerBuilder(PB)调用 Java 程序时,你可以通过以下步骤来实现:1. 配置 Java 环境:确保你的计算机上已经安装了 Java Development Kit(JDK),并且设置了正确的环境变量,如 JAVA_HOME 和 PATH。

2. 创建 Java 类:编写你想要在 Java 中执行的逻辑,并将其封装在一个 Java 类中。

确保该类有一个公共的静态方法,该方法将执行你的业务逻辑。

3. 编译 Java 类:使用 Java 编译器将你的 Java 类编译成字节码。

4. 在 PB 中创建外部函数:在 PB 中创建一个外部函数,用于调用 Java 类中的方法。

在外部函数的定义中,指定 Java 类的路径和方法名。

5. 调用外部函数:在 PB 脚本中调用你创建的外部函数,传递适当的参数。

下面是一个简单的示例,展示了如何在 PB 中调用 Java 程序:- Java 类:```javapublic class JavaClass {public static void myMethod(String input) {System.out.println("Java 方法执行,输入参数:" + input);}}```- PB 外部函数定义:```pascalfunction long javaCall(string input) library "JavaClass.jar"{return JavaClass::myMethod(input);}```- PB 脚本中调用外部函数:```pascalstring input = "Hello, Java!";javaCall(input);```请确保将"JavaClass.jar"替换为你实际的 Java 类的 JAR 文件路径。

PB通过OLEObject使用Word

PB通过OLEObject使用Word

PB通过OLEObject使用WordPB通过OLE Object使用Word1 引言在编程的时候,常常需要访问Word文档。

除了使用DDE之外,PowerBuilder还有一种操作Word的方式,就是通过OLEObjcet和OLEControl。

OLEObject是不可视的OLE对象,而OLEControl则是可视的窗口控件。

由于OLEObject较后者更灵活方便,如果不是必须在窗口上显示Word文档内容,使用前者是更好的选择。

程序开发员在使用OLE连接Word文档的时候,常常遇到这样两个问题:第一:如果某文档已经打开,再使用程序调用的时候,会产生程序运行错误;第二:经常发现创建的WinWord.exe进程没有能够正常终止。

2 分析下面我们来分析这两个错误产生的原因。

对于第一个错误,往往是由于使用OLEObjectVar.ConnectToObject(“”)的时候,这个文件已经打开了。

此时使用ConnectT oObject会造成错误。

对于第二个错误,一般是使用OLEObjectVar.ConnectToNewObject (“Word. Application”) 创建了新的Winword.exe进程,但是没有执行关闭这个新的应用的操作。

3 解决经过分析,我们可以确定了如何解决PB调用Word的程序的问题。

打开文档首先,我们使用.ConnectT oObject(“”)来打开一个空Word 文档。

打开成功后,使用.Application获得对Word.Application的引用并设置Applicatin.Visible=TRUE,并关闭刚才打开的空文档;然后,使用Word.Application的Open方法打开要使用的文档。

这样的方法打开文档,如果当前有正在运行的Windows.exe进程,就不必打开新的进程,而是使用当前的进程,并且可以成功地对当前的进程获得引用。

关闭文档首先,我们关闭程序打开的使用的文档;然后判断Application是否还有其他的打开的文档。

VB如何确定外部应用程序的终止

VB如何确定外部应用程序的终止

VB如何确定外部应用程序的终止
徐利军
【期刊名称】《计算机时代》
【年(卷),期】1998(000)004
【摘要】在编写Visual Basic for Windows应用程序时,通常会遇到这样的编程要求,从VB应用程序中调用一外部应用程序,在外部应用程序执行完毕后,再继续执行VB程序.在16位的VB应用程序中通过Shell()函数调用外部应用程序,然后通过使用Windows API询问应用程序的状态,但这样并不是一个十分有效的处理方法.在32位的VB程序中,提供了另一个更为有效的方法.一、16位VB应用程序如何决定外部应用程序的终止在16位VB应用程序中启动另一个外部应用程序,控制权返回VB应用程序,VB应用程序继续执行。

【总页数】2页(P15-16)
【作者】徐利军
【作者单位】上海海运学院计算机系
【正文语种】中文
【中图分类】TP311
【相关文献】
1.VB在CAI教学软件开发中的技术探讨--VB应用程序的优化 [J], 李姣军;何丰;王培容
2.WinCC V6.0 VBS脚本及VB应用程序在工程中的应用 [J], 刘颖
3.WinCC V6.0VBS脚本及VB应用程序在工程中的应用 [J], 刘颖
4.VB5应用程序对系统配置参数的确定 [J], 张小朋
5.VBA应用程序执行效率的改善与应用程序分发 [J], 安平
因版权原因,仅展示原文概要,查看原文内容请购买。

pb timer 事件用法

pb timer 事件用法

pb timer 事件用法
pb timer 是一个在PowerBuilder(PB)中用于处理定时器事件的结构。

PowerBuilder 是一个用于构建企业级应用程序的开发工具,而定时器是用于在特定的时间间隔后执行代码或事件的一种工具。

1.定义和启动定时器: 在PowerBuilder 中,首先需要在画板(如窗
口或用户对象)上定义一个定时器控件,并为其分配一个唯一的名称。

然后,通过代码设置定时器的间隔时间,并启动它。

2.处理定时器事件: 当定时器间隔时间到达时,PowerBuilder 会自
动触发一个事件。

你可以为这个事件编写代码来执行特定的任务。

这些代码通常包含在PowerScript 脚本中,并在定时器触发时执行。

3.停止和销毁定时器: 当不再需要定时器时,应停止并销毁它以释
放资源。

注意:定时器的名称和事件处理函数名称可以根据你的需求进行自定义。

上述示例中的do_my_timer 是事件处理函数的名称,而my_timer 是定时器的名称。

确保这些名称在你的应用程序中是唯一的,以避免冲突。

用VB调用或者结束外部程序

用VB调用或者结束外部程序

用VB调用或者结束外部程序我们编写程序时,有时会遇到在一个程序中调用并控制另一个程序执行的情况,在一些编程语言中实现起来较为繁琐,但如果用VB编写时,则可轻松实现。

下面我就以在程序中调用“计算器”为例,总结了以下几种方法:一、以异步方式来执行其他程序Shell 函数是以异步方式来调用其他程序的。

也就是说,用Shell 启动的程序可能还没有完成执行过程,就已经执行到Shell 函数之后的语句。

语法:Shell(pathname[,windowstyle])说明:pathname:必要参数。

Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。

例如:RetVal = Shell(″C:\WINDOWS\CALC.EXE″, 1) ′ 调用计算器。

二、以同步方式来执行其他程序有时候,我们需要让VB在执行完外部程序后再执行下一语句,这就需要使用API函数。

我们可通过OpenProcess和CloseHandle函数来检测调用软件的运行情况。

这两个函数的声明如下:Declare Function OpenProcess Lib ″kernel32″ Alias ″OpenProcess″ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongDeclare Function CloseHandle Lib ″kernel32″ Alias ″CloseHandle″ (ByVal hObject As Long) As Lo ng建立下面函数,用以判断程序是否在运行,如果是,则在运行时返回True。

Function IsRunning(ByVal ProgramID) As Boolean ′传入进程标识IDDim hProgram As Long ′被检测的程序进程句柄hProgram=OpenProcess(0,False,ProgramID)If Not hProgram=0 ThenIsRunning=TrueElseIsRunning=FalseEnd IfCloseHandle hProgramEnd Function例如要调用计算器(CALC.EXE)并等到它运行完成后再执行下一语句,可以使用以下代码:Dim RetValMsgBox ″开始运行″RetVal = Shell(″C:\WINDOWS\CALC.EXE″, 1)While IsRunning(RetVal)DoEventsWendMsgBox ″结束运行″三、关闭正在运行中的其他软件如果要在程序中关闭正在运行中的其他程序,可以先使用FindWindow函数找出相应的程序句柄,然后调用PostMessage函数关闭该程序即可。

pb try except 用法 -回复

pb try except 用法 -回复

pb try except 用法-回复try except 用法:一个更安全的编程实践在软件开发过程中,我们经常会遇到各种错误和异常情况。

为了更好地处理这些情况,Python 提供了一种异常处理机制,即try except。

在本文中,我们将一步一步地回答“[try except 用法]”这一主题,详细介绍其用法以及如何在代码中正确使用这种机制。

# 什么是try except?try except 是一种异常处理机制,用于捕捉并处理代码中可能出现的错误和异常情况。

其语法结构如下:try:# 可能会产生异常的代码块except 错误类型:# 处理异常的代码块当try 代码块中的代码发生错误时,Python 将抛出相应的异常。

此时,程序将停止执行try 代码块后面的代码,并转而执行except 代码块中的代码。

通过使用try except,我们可以更好地处理程序中的错误情况,使程序具备更高的稳定性和容错性。

# try except 的基本用法现在,我们来看一个简单的例子,以了解try except 的基本用法。

假设我们要编写一个函数,用于计算两个数字的商:def divide(x, y):try:result = x / yprint("计算结果为:", result)except ZeroDivisionError:print("除数不能为零!")在这个例子中,我们使用了try except 来处理可能发生的ZeroDivisionError 异常。

如果第二个参数y 为零,Python 会抛出ZeroDivisionError 异常。

在except 代码块中,我们简单地打印了一条错误信息。

现在我们可以在代码中调用这个函数,看看try except 是如何工作的:divide(10, 2) # 输出:计算结果为: 5.0divide(10, 0) # 输出:除数不能为零!正如我们所看到的,第一次调用divide 函数时,try 代码块中的除法运算成功执行,输出了正确的结果;而第二次调用时,try 代码块中的除法运算抛出了ZeroDivisionError 异常,程序转而执行了except 代码块。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

怎样在PB中调用外部程序并判断其运行结束?
育龙网 WWW.CHINA-B.C0M 2009年08月31日来源:互联网
育龙网核心提示:在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息。

如我们要备份Adaptive Server Anywhere 6.0数据库,在备份结束后显
在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息。

如我们要
备份Adaptive Server Anywhere 6.0数据库,在备份结束后显示"备份完成!"的提示信息,
如果在调用备份程序dbbackup后马上用messagebox显示提示信息,那么程序运行时则会出
现这种情况: dbbackup备份程序还在运行,"备份完成!"的提示就已经显示了,显然不符
合我们的设想。

对于这种情况,我们可以借助API函数FindWindowA()、IsWindow()和PB
本身函数yield()来解决。

声明API函数:
Function long FindWindowA (String lpClassName , String lpWindowName ) Library
"user32.dll"
Function boolean IsWindow (Long hwnd ) Library "user32.dll"
调用:
ulong ll_handle
int li_loop
SetPointer(HourGlass!) //设置鼠标指针
//运行备份数据库程序dbbackup,并使其最小化
run("dbbackup -c ~"uid=dba;pwd=sql; dbf=D:“Sybase“Adaptive Server Anywhere
6.0“asademo.db~" d:“backup", Minimized!)
ll_handle = 0
//循环至dbbackup窗口打开
Do While ll_handle = 0
ll_handle = FindWindowA("tty","dbbackup")
yield() //
loop
//等待dbbackup窗口关闭
Do While isWindow(ll_handle)
Yield()
Loop
//应用执行完成MessageBox("提示信息", "备份完成!")。

相关文档
最新文档