已知打开文件的名字和相关信息,如何取得打开这个文件的进程名或者PID?高手指点!

解决方案 »

  1.   

    用CreateToolhelp32Snapshot进行对系统所有进程进行快照,然后利用Process32First取得第一个进程句柄,然后把得到的PROCESSENTRY32结构体中的szExeFile就是进程名进行比较,利用Process32Next进行循环比较。
    #include<iostream>
    #include<windows.h>
    #include<Tlhelp32.h>
    using namespace std;
    DWORD GetProcessID(char *FileName)
    {
    HANDLE myhProcess;
    PROCESSENTRY32 mype;
    BOOL mybRet;
    //进行进程快照
    myhProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //TH32CS_SNAPPROCESS快照所有进程
    //开始进程查找
    mybRet=Process32First(myhProcess,&mype);
    //循环比较,得出ProcessID
    while(mybRet)
    {
    if(strcmp(FileName,mype.szExeFile)==0)
    return mype.th32ProcessID;
    else
    mybRet=Process32Next(myhProcess,&mype);
    }
    return 0;
    }int main(){
            cout<<GetProcessID("MyTest.exe");  //通过进程名比较
            return 0;
    }
      

  2.   


    我也想到了这样,但是比如EDITPLUS当他再打开文件时,没有进程名称和PID的增加啊?