Platform
SDK
for
Windows
XP
SP2,有了这个包以后,将psapi.h和psapi.lib拷贝到VC的include和lib目录,采用PSAPI编程:
2、用OpenProcess打开进程
3、用GetProcessImageFileName函数就可以获取程序的完整目录
上面三个函数的资料在互联网上很培行宴完整,你可以用函数名作为关键字搜索一下就知道了。
下面举个例子:
#include
<windows.h>
#include
<stdio.h>
#include
<tchar.h>
#include
<psapi.h>
#pragma
comment(lib,
"psapi.lib")
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]
)
}
#include <iostream>#include <windows.h> // 这个必须要有
#include <string> // 字符串处理函数
using namespace std
int main() {
char szFileName[256] = "" // 待会存完整路径
string strAnotherExe = "pipe.exe" // 要执行的另外一个exe的名称
// 获得程序的运行路径,包含本程序名
GetModuleFileNameA(NULL, szFileName, 256)
string strFileName = szFileName // 用string处理比较方便
// 删掉本程序名轮谈芦,只保留路径
size_t slashIndex = strFileName.rfind('\\')
strFileName.erase(slashIndex+1)
// 拼接要启动的程序的完整文件名
strFileName += strAnotherExe
cout<<"Another exe path : "<<strFileName<<endl
// 在当前程序中启动外部程序,输出会进入本程序
//system(strFileName.c_str())
// 在新的窗口中打开外部程序
strFileName = "start "+strFileName
system(strFileName.c_str())
return 0
}
主要思路是GetModuleFileNameA获得程序运行时的绝对路径,包含程序侍念名。
因此只要删掉程序名,然后拼接上另外的一个程序名就可以了。
用system("程序名")可以启动一个子进程,然后主进程卡在system处,等子进程结束,主进程才继续往下走。
用system("start 程序名")可以在新窗口中打开进程,不等子进程结束,主进程就继续往下走。
PS:如果编译器提示没有system函数,请包含stdlib.h头文腊带件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)