热情软件屋

 

如何知道另外一个程序的当前状态


编号:QA003084
建立日期: 2000年6月26日 最后修改日期:2000年6月26日
所属类别:

dcr:
    操作系统: WINDOWS 98
    编程工具: VB6.0
    问题: 我在程序中想知道另外一个程序的当前状态,即是否在运行。
    因此我使用了API函数,GETMODULEHANDLE(),此API函数有一个参数,是要检查的模块名,但是我试验多次,都不能正确获得状态。如:我想知道NOTEPAD是否在运行,我调用了
    dim RetValue as Integer
    RetValue=getmodulehandle("NOTEPAD.EXE")
    if RetValue=0 then
     msgbox "No Run"
    else
     msgbox "Run"
    end if
    但是,无论我运行NOTEPAD与否,总是返回0,既未运行。我想在想知道如何正确使用此API,它的参数应该怎样填写,望指教,谢谢!
    水平: 中级

回答:

    如果某组件与当前进程隶属于同一进程的地址空间,那么GetModuleHandle可以用来获取该组件的句柄。例如,如果你的VB程序中调用了Kernel32中的API,那么用GetModuleHandle可以获取Kernel32.dll的句柄。事实上记事本与你的程序不属于同一进程,因此用GetModuleHandle无法达到你所期望的效果。
    有一种方法可以解决你的问题。你可以用GetWindow(me.hwnd,GW_HWNDFIRST)获得顶级窗口列表的第一个窗口,然后根据该窗口的句柄用GetWindow(x,GW_HWNDNEXT)枚举所有的顶级窗口。每获得一个窗口句柄,就用GetWindowText活动窗口的标题,如果标题里发现有“记事本”字样说明有记事本打开。
    还有一种方法比较麻烦,就是枚举当前所有的进程,如果发现有“notepad”说明有记事本打开。枚举的方法可以参考QA000718 "如何列出系统正在进行的程序及强行关闭该程序"

此问题由周杰回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio