发新话题
打印

什么方法根据一个窗体的hwnd,找到生成这个窗体的程序名称(或在电脑中的位置)吗?

什么方法根据一个窗体的hwnd,找到生成这个窗体的程序名称(或在电脑中的位置)吗?

什么方法根据一个窗体的hwnd,找到生成这个窗体的程序名称(或在电脑中的位置)吗?
有没有适当的API函数?

TOP

首先使用GetWindowThreadProcessId获取该窗口的进程ID, 然后再通过进程ID来获取该进程的信息就可以取得程序的路径信息了, 应该就是你说的程序名称了吧.

具体的方法NT系统和9x的系统下是不同的.需要注意一下.

下面给出NT下面的方法, 这个是很早之前做的一个函数了.

DWORD GetProcessBaseModuleName(DWORD ProcessID, LPSTR ProcessFileName)
{
    PROCESS_MEMORY_COUNTERS ProcessMemoryInfo;
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, false, ProcessID);
    if(NULL != hProcess)
        {
        HMODULE hMod;
        DWORD cbNeeded;

        if(EnumProcessModules(hProcess, &hMod, sizeof(HMODULE), &cbNeeded))
            {
            GetModuleFileNameEx(hProcess, hMod, ProcessFileName, 256);
            if (ProcessFileName == NULL) return 0;
            DWORD cb = sizeof(PROCESS_MEMORY_COUNTERS);
            GetProcessMemoryInfo(hProcess, &rocessMemoryInfo, cb);
            }

        CloseHandle( hProcess );
        }

    return ProcessMemoryInfo.WorkingSetSize;
}


编译断代码需要加上PSAPI.H以及链接PSAPI.LIB静态库.

TOP

谢谢leykion管理员!不过西语言,我不懂啊(偶只会vb)。用GetWindowThreadProcessId获取该窗口的进程ID,这个我已经做到了。关键时如何将ID或HWND转换成改窗体的文件名。您能说说上面的主要思路,或者关键(转换用的)的API函数吗?
辛苦您了。

TOP

GetModuleFileNameEx

TOP

谢谢大家,大概可以搞定了。

[ 本贴由 biku 于 2004-5-15  00:20 编辑过 ]

TOP

发新话题