你首先需要为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]
);
}
argv[0]是调用程序时的第一个参数,也就是程序名,但如果是用绝对路径调用程序的话,argv[0]就含有绝对路径和文件名了。由于VC6是这样做的,所以导致楼上有这个误会。
找到工作路径是系统相关的,包含windowsh后,可以使用这样一组函数
1GetCurrentDirectory()
2GetCurrentDirectoryA()
3GetCurrentDirectoryW()
(1)实际是一个宏,直接指向了(2),它的函数原型是:
DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer)
要指定一个缓冲区存储函数结果,
第一个参数是缓冲区的大小,第二个参数是缓冲区首地址,
返回值是实际路径字符串的长度。
调用起来就像这样:
#include <stdioh>
#include <windowsh>
int main(int argc, char argv[])
{
char dir[100];
int length;
length = GetCurrentDirectory(100,dir);
printf("%d\n%s\n",length,dir);
return 0;
}
(3)嘛,顾名思义,是处理宽字符的,如果你的路径名里有东方文字,就使用这个啦。
DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer)
注意第二个参数与上面的不同,是宽字符指针,准确的说是unsigned short
最后,提醒一下,由于是win32api,并不是c/c++标准库里的函数,所以是系统相关的,使用的同时,你的程序失去了可移植性,请小心使用。
C#中获取文件路径以及文件名的方法
//获取打开文件的文件名(包括文件的扩展名)
//注意:参数FileName为OpenFileDialogFileName
public string GetFileName(string FileName)
{
string[] Names = FileNameSplit(new char[]{'\\'});
string Name = Names[NamesLength-1];
return Name;
}
//获取打开文件的路径
//注意:参数FileName为OpenFileDialogFileName
public string GetPath(string FileName)
{
string path = FileNameReplace(GetFileName(FileName),"");
return path;
以上就是关于VC 如何根据进程名称找程序的目录全部的内容,包括:VC 如何根据进程名称找程序的目录、C++得到程序自身路径、VC中获取文件路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)