16,472
社区成员
发帖
与我相关
我的任务
分享
#include <tlhelp32.h> // for CreateToolhelp32Snapshot
#include <psapi.h>
#pragma comment(lib, "psapi")
static
bool GetPathByProcessID(DWORD pid,TCHAR* FilePath,DWORD nSize)
{
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
if (!hProcess)
{
// tracef("无权访问该进程");
return false;
}
DWORD ret= GetModuleFileNameEx(hProcess, NULL, FilePath, nSize) ;
// tracef(_T("GetModuleFileNameEx : %s ") , ret ? _T("successfully") : _T("failed") );
CloseHandle(hProcess);
return ret!=0;
}
//遍历所有顶层窗口
HWND hWnd = GetTopWindow(NULL);
for ( ; hWnd ; hWnd = GetNextWindow( hWnd , GW_HWNDNEXT) )
{
if ( IsWindowVisible(hWnd)
&& (GetWindowLong(hWnd,GWL_STYLE) & WS_OVERLAPPEDWINDOW) // 一般来说WS_OVERLAPPEDWINDOW 才认为是主窗口
&& GetParent(hWnd)==NULL ) // 排除有父窗口的POPUP窗口
{
DWORD ProcessID = 0;
DWORD TheardId = GetWindowThreadProcessId( hWnd,&ProcessID);
TCHAR FilePath[MAX_PATH];
GetPathByProcessID(ProcessID, FilePath,MAX_PATH) ;
trace(FilePath);
}
}