pb怎么判断其他程序是否运行

pb如何判断其他程序是否运行
大家好:
  我在网上查了很多,都是调用findwindow这个外部函数,这个函数有两个参数,都是什么意思啊,什么事窗口类?什么是窗口标题。如果我自己用pb做了个程序,怎么才能知道这个程序打开时的窗口类或标题?谢谢

------解决方案--------------------
那个不太好,用这个会好些

首先声明下列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这样的应用,这些信息对还是非常有用的。

------解决方案--------------------
Function ulong FindWindow (long classname, string windowname) library 'user32.dll' alias for FindWindowA

然后打开应用时,调用以下代码(gs_system 是主界面窗口抬头(title)名称):
IF FINDWINDOW(0, gs_system) > 0 THEN
MessageBox('提示', gs_system + '程序已经在运行,您不能再启动另一个!')
Return
END IF
------解决方案--------------------
PB11.5:
FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "User32.dll" alias for "FindWindowA;Ansi" 
两个参数


classname 窗口句柄 windowname 窗口名

比如 想判断是否打开了新建记事本.txt

ulong ul_Handle, ul_Class
SetNull(ul_Class)
ul_Handle = FindWindowA(ul_Class, “新建记事本.txt”)
if ul_Handle = 0 then 

函数返回 0 代表没找到,否则返回窗口句柄,也就代表改程序打开了。ul_class返回窗口类型

不过这个无法检测最小化到图标栏的进程,学习永生那个吧。