Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Const WM_CLOSE = &H10
Public Function EndOld(WindowName As String)
Dim app_hWnd As Long
app_hWnd = FindWindow(vbNullString, WindowName)
If app_hWnd <> 0 Then
SendMessage app_hWnd, WM_CLOSE, 0, 0
TerminateProcess app_hWnd, 0
End If
End Function
先用OpenProcess()函数将进程打开后,利用EnumProcessModules()函数枚举该进程的模块,利用GetModuleFileNameEx()函数就能取得该进程的路径
#include <stdioh>
#include <windowsh>
#include "PSAPIH"
#pragma comment( lib, "PSAPILIB" )
int main(void)
{
DWORD processid[1024],needed,processcount,i;
HANDLE hProcess;
HMODULE hModule;
char path[MAX_PATH] = "";
char temp[256];
printf("ShowProcessPath with [Process Status API]/n");
EnumProcesses(processid, sizeof(processid), &needed);
processcount=needed/sizeof(DWORD);
for (i=0;i<processcount;i++)
{
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,processid[i]);
if (hProcess)
{
EnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed);
GetModuleFileNameEx(hProcess, hModule, path, sizeof(path));
GetShortPathName(path,path,256);
itoa(processid[i],temp,10);
printf("%s --- %s/n",path,temp);
}
else
{
printf("Failed!!!/n");
}
}
CloseHandle(hProcess);
CloseHandle(hModule);
itoa(processcount,temp,10);
printf("/nProcess Count:%s/n/n",temp);
return 0;
}
版本 2
子程序 取程序路径, 文本型, 公开, 取指定进程名的程序启动路径(成功返回路径,失败或进程不存在返回空)
参数 进程名, 文本型, , 程序进程名
参数 区分大小写, 逻辑型, 可空, 默认不区分进程名大小写
局部变量 进程列表, 进程信息_
局部变量 进程数, 整数型
局部变量 进程快照, 整数型
局部变量 临时, 整数型
局部变量 临时路径, 文本型
局部变量 临时进程名, 文本型
局部变量 snap, 整数型
局部变量 mod, 模块信息型
进程快照 = _创建快照 (15, 0)
如果真 (进程快照 = 0)
信息框 (“创建进程快照失败”, 0, )
返回 (“”)
如果真结束
进程数 = 0
进程列表dwSize = 296
临时 = _第一个 (进程快照, 进程列表)
判断循环首 (临时 ≠ 0)
进程数 = 进程数 + 1
snap = _创建快照 (8, 进程列表进程ID)
modsize = 1024
_第一个模块 (snap, mod)
临时路径 = 取字节集数据 (到字节集 (mod模块完整路径), 10, )
_关闭对象 (snap)
如果真 (进程列表进程ID ≠ 0)
临时进程名 = 到文本 (进程列表进程名称)
如果 (区分大小写)
如果真 (临时进程名 = 进程名)
_关闭对象 (进程快照)
如果真 (寻找文本 (临时路径, “”, , 假) > 0)
返回 (“”)
如果真结束
返回 (临时路径)
如果真结束
否则
如果真 (到小写 (临时进程名) = 到小写 (进程名))
_关闭对象 (进程快照)
如果真 (寻找文本 (临时路径, “”, , 假) > 0)
返回 (“”)
如果真结束
返回 (临时路径)
如果真结束
如果结束
如果真结束
临时 = _下一个 (进程快照, 进程列表)
判断循环尾 ()
_关闭对象 (进程快照)
返回 (“”)
'--------------------------------------DLL有什么不对说声,内容比较多好像少发了几个(下面是DLL或者自定义数据)--------------楼主可以下载个超级模块试试,里面有取进程目录的子程序
版本 2
数据类型 进程信息_, , 进程信息
成员 dwSize, 整数型
成员 cntUsage, 整数型
成员 进程ID, 整数型
成员 th32DefaultHeapID, 整数型
成员 th32ModuleID, 整数型
成员 cntThreads, 整数型
成员 th32ParentProcessID, 整数型
成员 pcPriClassBase, 整数型
成员 dwFlags, 整数型
成员 进程名称, 字节型, , "256"
版本 2
数据类型 模块信息型, 公开, 进程模块信息
成员 size, 整数型
成员 mid, 整数型
成员 pid, 整数型
成员 gusage, 整数型
成员 pusage, 整数型
成员 base, 整数型
成员 大小, 整数型
成员 模块句柄, 整数型
成员 模块文件名, 字节型, , "256"
成员 模块完整路径, 字节型, , "256"
版本 2
DLL命令 _创建快照, 整数型, , "CreateToolhelp32Snapshot"
参数 falg, 整数型
参数 id, 整数型
背景:
由于上个同事没有交接清楚,发现机器上有很多路径下含有nginx,系统service也配置了nginx,但是使用系统配置的service nginx status是stop状态,实际有nginx进程在执行,需要定位到该进程所启动的nginx位置。
解决方案:
1先使用ps查询出nginx的进程号此处记为PID
2使用ll /proc/PID
3查看cwd或者exe后的 -> 指向的路径就是该进程对应的应用程序路径
你首先需要为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]
);
}
以上就是关于VB已知进程名,以及进程路径,获取pid,然后结束进程全部的内容,包括:VB已知进程名,以及进程路径,获取pid,然后结束进程、vc怎样通过进程名获取进程的工作目录、易语言怎么取进程的路径。比如已知道QQ.exe 要它的文件所在路径。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)