当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

PB中使用run()与windows API函数shellExecute()打开外部EXE程序(打开指定文件或传参)

admin2年前 (2023-11-02)PowerBuilder5880 修订时间:2023-12-31 17:45:04

PB中我们一般使用如下方法打开外部EXE程序,并且进行有限的操作。

使用run()函数

示例代码:

run("notepad.exe")

run("c:\123\show.exe 参数1|参数2")

如果我们想用记事本打开一个现有的文本文件呢?我们可以轻松地使用脚本,如下所示:

string ls_namafile = 'd:\panggilnotepad.txt'
run("notepad.exe"+ls_namafile)

上面的脚本将调用记事本并打开文件。但是如果我们不知道用于打开文本文件(*.Txt)的默认应用程序是notepad++,该怎么办。如果我们直接使用运行("panggilnotepad.txt"),它将无法正常运行。

使用windows API函数shellExecute()

函数的定义如下:

FUNCTION ulong ShellExecute(ulong hwnd,ref string lpOperation,ref string lpFile,ref string lpParameters,ref string lpDirectory,ulong nShowCmd) LIBRARY "shell32.dll" ALIAS FOR "ShellExecuteA"

以下是一个简单的示例:(这是窗口中一个按纽的click事件的代码)

ulong hwnd,nShowCmd
hwnd=Handle(parent)
nShowCmd=1
string lpOperation,lpFile,lpParameters,lpDirectory
lpOperation="open"
lpFile="hh.exe"
lpParameters="help.chm"
SetNull(lpDirectory)
ShellExecute(hwnd,lpOperation,lpFile,lpParameters,lpDirectory,nShowCmd)

拓展

在PB中调用外部程序并判断其运行结束后再执行后续代码。对于这种情况,我们可以借助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("提示信息", "备份完成!")


 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/index.php?id=324

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。