如何获得系统当前所有进程的程序文件名?就像WINDOWS2000中的任务管理器一样。各位虾帮帮忙,俺实在不会:P

nemo2050 2001-05-31 06:08:00
如何获得系统当前所有进程的程序文件名?就像WINDOWS2000中的任务管理器一样。各位虾帮帮忙,俺实在不会:P
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxbyl 2001-06-14
  • 打赏
  • 举报
回复
这是我程序中的一段代码,里面包括了这个功能:
bool CWatcherDlg::DetectState(bool bCheck)
{
int nCount,i;
char szName[256];
tagProgramInfo *pInfo=NULL;
CTimeSpan spanOneHour(0,1,0,0);
DWORD pProcessID[1024];
DWORD dwSize;
HANDLE hProcess;
HMODULE hModule;
CString strMsg;
nCount=m_aryProgramInfo.GetSize();
HWND hWnd=::FindWindow(NULL,"Microsoft Visual C++ Runtime Library");
if(hWnd!=NULL)
::PostMessage(hWnd,WM_KEYDOWN,13,0x011c0001); //模拟按下Enter健
/*清除链表中各进程状态*/
for(i=0;i<nCount;i++)
{
pInfo=(tagProgramInfo *)m_aryProgramInfo.GetAt(i);
if(bCheck==true)
{
if(m_ctrlProgram.GetCheck(i)==FALSE)
pInfo->nState=STA_PAUSE | STA_ERROR;
else
pInfo->nState=STA_ERROR;
}
}
/*枚举所有进程*/
EnumProcesses(pProcessID,sizeof(pProcessID),&dwSize);
nCount=dwSize/sizeof(DWORD);
/*枚举所有窗口*/
EnumWindows(EnumWndProc,(LPARAM)this);
for(i=0;i<nCount;i++)
{
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ |PROCESS_TERMINATE,FALSE,pProcessID[i]);
if(hProcess)
{
if(EnumProcessModules(hProcess,&hModule,sizeof(hModule),&dwSize))
{
GetModuleFileNameEx(hProcess,hModule,szName,sizeof(szName));
TRACE1("程序名:%s\r\n",szName);
pInfo=GetInfoFromName(szName); //枚举到的程序是否在链表中
if(pInfo==NULL)
{
CloseHandle(hProcess);
continue;
}
pInfo->nState&=STA_PAUSE; //清除nState中的低位
pInfo->nState|=STA_NORMAL; //设置低位为Normal
pInfo->hProcess=hProcess;
}
}
}
EnumWindows(EnumWndProc,(LPARAM)this);
nCount=m_aryProgramInfo.GetSize();
for(i=0;i<nCount;i++)
{
pInfo=(tagProgramInfo *)m_aryProgramInfo.GetAt(i);
if(pInfo->nState & STA_PAUSE)
continue;
if(pInfo->hProcess==NULL)
{
StartProgram(pInfo);
continue;
}
if(pInfo->nState==STA_ERROR || pInfo->nState==STA_NULL)
{
UpdateTrayNotifyWnd();
pInfo->hProcess=NULL;
StartProgram(pInfo);
}
}
return true;
}
abcicq 2001-06-14
  • 打赏
  • 举报
回复
枚举窗口.
.
.
.
HWND OtherWindow = NULL;
EnumWindows(FuncEnumWindow,(long)&OtherWindow);
if(OtherWindow != NULL)
{
//* Deal to your codes
}

FuncEnumWindow()
{
//* return false; //* Stop Enum Windows
//* return true; //* Continue Enum Windows
}
.
.
.
acute 2001-06-14
  • 打赏
  • 举报
回复
关注
nemo2050 2001-06-14
  • 打赏
  • 举报
回复
:(

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧