请教,如何判断一个程序已经运行

ybbuuuuss 2014-08-31 06:17:22
我在网上找的这样的例子
Function uint FindExecutable(string FileName,REF string Directory,REF string Result)Library"shell32.dll"
integer li_size=144,li_result
string ls_executable=Space(li_size)
integer li_module_usage
uint li_module_handle
li_result=FindExecutable(as_filename,as_directory,ls_executable)
IF li_result<32 THEN
msg('bcg')
Return FALSE
else
msg('cg')
Return true
end if
可是在我这运行就不行,非说调用FindExecutable 错误什么的,我的是PB9,急求大家帮解答。
...全文
167 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
WorldMobile 2014-09-01
  • 打赏
  • 举报
回复
引用 楼主 ybbuuuuss 的回复:
我在网上找的这样的例子 Function uint FindExecutable(string FileName,REF string Directory,REF string Result)Library"shell32.dll" integer li_size=144,li_result string ls_executable=Space(li_size) integer li_module_usage uint li_module_handle li_result=FindExecutable(as_filename,as_directory,ls_executable) IF li_result<32 THEN msg('bcg') Return FALSE else msg('cg') Return true end if 可是在我这运行就不行,非说调用FindExecutable 错误什么的,我的是PB9,急求大家帮解答。
首先声明下列localexternal函数 FunctionuintGetModuleHandle(stringModuleName)Library"kernel" FunctionuintGetModuleUsage(uintModuleName)Library"kernel" FunctionuintFindExecutable(stringFileName,REF stringDirectory,REF stringResult)Library"shell" 键入下面的一个窗口级函数: fw_check_app_status //返回:boolean //参数: //stringas_filename //stringas_directory integerli_size=144,li_result stringls_executable=Space(li_size) integerli_module_usage uintli_module_handle li_result=FindExecutable(as_filename,as_directory,ls_executable) IFli_result<32THENReturnFALSE //如可执行文件已载入,获取这个执行文件的句柄 li_module_handle=GetModuleHandle(ls_executable) IFli_module_handle<1THEN //没有载入 ReturnFALSE ELSE //获取有多少个实例被载入 li_module_usage=GetModuleUsage(li_module_handle) ReturnTRUE ENDIF 工作原理 这段程序可以获取某个应用是否正在运行。 我们用windowsAPI中的GetModueHandle函数来判定是否另一个应用正在运行。为了做到这一点,我们需要知道文件的全路径名(包括驱动器名和路径)。我们可以将它包含在应用的INI文件中,也可以通过写入源代码将它嵌入可执行程序。这里向大家推荐的是采用前者的方法,这样作可使应用具有更多的灵活性。在上面的窗口级函数中,我们首先在用户的Windows目录中查找win.ini文件。因为对于我们需要进行查询的应用与特定扩展名的文档之间的关联被记录在WIN.INI文件中。于是我们所要做的第一件事就是在 WIN.INI文档中查找这一关联,以知道我们所要寻找应用是从通过哪个软件装入的。我们可以自己搜索WIN.INI文件,或者调用WindowsAPI中的FindExecutable函数来得到这一信息。这里,我们使用了第二种方法。我们只要将与我们所希望寻找的可执行程序相关联的一个文件的文件名与路径传递给FindExecutable函数,就会得到该可执行程序的全路径名。这在我们判断出该可执行程序没有在运行以后启动该程序时是很有用的。 一旦获得了可执行程序的全路径名,我们将它传递给GefModuleHandle函数。如果应用正在运行,则该函数返回应用的句柄。如果返回0,说明应用并没有装入,此时退出函数。如果应用正在运行,我们将获得的应用的句柄传递给GetModuleUsage函数。这个函数的返回值会告诉我们这个应用有几个不同的实例。在我们的例子中,如查询的应用是MicrosoftWord,该应用是不允许多个实例同时运行,但象NotePad这样的应用,这些信息对还是非常有用的。

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧