怎样获知一个特定的执行文件正在执行? 比如notepad.exe, 怎样判断当前环境, notepad有没有运行?

解决方案 »

  1.   

    枚举进程
    http://www.xiaozhou.net/ReadNews.asp?NewsID=861
      

  2.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub Command1_Click()Dim hw&hw& = FindWindow("notepad", vbNullString) ' ThunderRTMain under VB4If hw& = 0 Then
    MsgBox "不存在"
    Else
    MsgBox "notepad已经打开"
    End If
    End Sub
      

  3.   

    ft,我怎么写了VB的源码。不好意思,刚刚逛玩VB版回来,大脑还没有转换过来。其实VC也完全一样的,只要一个Findwindow就可以了:此API用法:http://www.keai.com.cn/api/FindWindow.htm
      

  4.   

    谢谢以上两位, 对于PSAPI, 在WIN98 VC6上怎样使用呢?  这个没用过, 各位指点下,
    刚才想使用EnumProcesses这个函数,  MSDN上有介绍, 确没头文件, 库文件, 呵FindWindow是个好注意, 谢谢楼上
      

  5.   

    可以知道窗口名或类名,简单的用FindWindow好了。
      

  6.   

    问题是不知道类名, 怎么办, FINDWINDOW是不是没辙了?
      

  7.   

    不知道类名也可以知道谁在运行,windows任务管理器不是做到了吗?同理我们也可以做到.
    第一步:通过ToolHelp API茯得所有进程列表;
    第二步:利用windows的PROCESSENTRY32结构,通过一个loop即可茯得相应进程的path(也包括程序名).
    ....
    这样不什么问题都解决了.
      

  8.   

    枚举进程,比较模块名是否一致即可。void CTerminateProcessDlg::OnGetProcess() 
    {    
        m_ListBox.ResetContent();
        CString m_output;
        HANDLE hProcessSnap=NULL;
        PROCESSENTRY32 pe32={0};
        hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        if(hProcessSnap==(HANDLE)-1)
        {
            ::MessageBox(NULL,"查询进程失败!:(","错误提示",MB_OK);
        
        }
        pe32.dwSize=sizeof(PROCESSENTRY32);
        if(Process32First(hProcessSnap,&pe32))
        {
            do
            {
                if(!strcmp(pe32.szExeFile,"a.exe"))
                           AfxMessageBox("发现指定进程!");
            }
            while(Process32Next(hProcessSnap,&pe32));
        }
        else
        {
            ::MessageBox(NULL,"出现意外错误!","错误提示",MB_OK);
        }
        CloseHandle(hProcessSnap);}
      

  9.   

    绝大部分进程都是可以得知类名的。
    祭出SPY++!
    问题迎刃而解