你首先需要为VC下载一个Microsoft
Platform
SDK
for
Windows
XP
SP2,有了这个包以后,将psapih和psapilib拷贝到VC的include和lib目录,采用PSAPI编程:
2、用OpenProcess打开进程
3、用GetProcessImageFileName函数就可以获取程序的完整目录
上面三个函数的资料在互联网上很完整,你可以用函数名作为关键字搜索一下就知道了。
下面举个例子:
#include
<windowsh>
#include
<stdioh>
#include
<tcharh>
#include
<psapih>
#pragma
comment(lib,
"psapilib")
void
PrintProcessNameAndID(
DWORD
processID
)
{
TCHAR
szProcessName[MAX_PATH]
=
TEXT("<unknown>");
TCHAR
szProcessPath[MAX_PATH]
=
TEXT("<unknown>");
//
获取进程句柄
HANDLE
hProcess
=
OpenProcess(
PROCESS_QUERY_INFORMATION
|
PROCESS_VM_READ,
FALSE,
processID
);
//
获取进程名称和路径
if
(NULL
!=
hProcess
)
{
HMODULE
hMod;
DWORD
cbNeeded;
if
(
EnumProcessModules(
hProcess,
&hMod,
sizeof(hMod),
&cbNeeded)
)
{
GetModuleBaseName(
hProcess,
hMod,
szProcessName,
sizeof(szProcessName)/sizeof(TCHAR)
);
}
GetProcessImageFileName(hProcess,
szProcessPath,
MAX_PATH);
}
//
打印进程名、进程号和路径地址
_tprintf(
TEXT("%s
(PID:
%u)
<%s>\n"),
szProcessName,
processID,
szProcessPath
);
CloseHandle(
hProcess
);
}
void
main(
)
{
//
获取进程列表
DWORD
aProcesses[1024],
cbNeeded,
cProcesses;
unsigned
int
i;
if
(
!EnumProcesses(
aProcesses,
sizeof(aProcesses),
&cbNeeded
)
)
return;
//
计算当前一共多少个活动进程
cProcesses
=
cbNeeded
/
sizeof(DWORD);
//打印进程信息
for
(
i
=
0;
i
<
cProcesses;
i++
)
if(
aProcesses[i]
!=
0
)
PrintProcessNameAndID(
aProcesses[i]
);
}
WIN32_FIND_DATA findFileData;
HANDLE hFind = FindFirstFile(szFileName, &findFileData);
具体的可以参考:
>
以上就是关于VC 如何根据进程名称找程序的目录全部的内容,包括:VC 如何根据进程名称找程序的目录、用VC++如何实现获取指定”文件夹“的句柄,请各位朋友们指教一下,谢谢!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)