进程列表的两个小问题,马上给分!
问题:2k下用BCB6.0列举线程时有两个问题
1.结构processinfo.szExeFile取出的是全路径,怎么我只能得到文件名?
2.取文件版本信息时候和Version.dll冲突?
代码如下:
void __fastcall TfmMain::Button1Click(TObject *Sender)
{
fmMain->lstThread->Items->Clear();
TListItem *pListItem;
AnsiString asExeFile;
Pointer ptFileInfo,pt;
unsigned int s;
DWORD sizeFileInfo,size;
HANDLE hSnapShot;
PROCESSENTRY32 processinfo;
processinfo.dwSize=sizeof(processinfo);
hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapShot==NULL)
{
return ;
}
bool bFindProc=Process32First(hSnapShot,&processinfo);
while(bFindProc)
{
pListItem=fmMain->lstThread->Items->Add();
asExeFile=AnsiString(processinfo.szExeFile);
pListItem->Caption=asExeFile;
pListItem->SubItems->Add(IntToStr(int(processinfo.th32ProcessID)));
//pListItem->SubItems->Add(IntToHex(int(processinfo.th32ProcessID),8).UpperCase());
sizeFileInfo=GetFileVersionInfoSize(asExeFile.c_str(),&size);
ptFileInfo=malloc(sizeFileInfo);
GetFileVersionInfo(asExeFile.c_str(),NULL,sizeFileInfo,ptFileInfo);
if(VerQueryValue(ptFileInfo,"\\StringFileInfo\\040904E4\\FileVersion",&pt,&s))
{
pListItem->SubItems->Add(PChar(pt));
}
if(VerQueryValue(ptFileInfo,"\\StringFileInfo\\040904E4\\CompanyName",&pt,&s))
{
pListItem->SubItems->Add(PChar(pt));
}
if(VerQueryValue(ptFileInfo,"\\StringFileInfo\\040904E4\\FileDescription",&pt,&s))
{
pListItem->SubItems->Add(PChar(pt));
}
free(ptFileInfo);
bFindProc=Process32Next(hSnapShot,&processinfo);
}
CloseHandle(hSnapShot);
}