VC 如何根据进程名称找程序的目录

VC 如何根据进程名称找程序的目录,第1张

你首先需要为VC下载一个Microsoft

Platform

SDK

for

Windows

XP

SP2,有了这个包以后,将psapih和psapilib拷贝到VC的include和lib目录,采用PSAPI编程:

1、用EnumProcesses函数列出当前所有进程

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中获取文件路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9502096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存