c++中怎样根据进程名得到进程pid

c++中怎样根据进程名得到进程pid,第1张

HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0 );

PROCESSENTRY32 procentry=sizeof(PROCESSENTRY32);

BOOL bFlag=Process32First( hSnapShot, &procentry ) ;

while( bFlag )

{

if(stricmp(procentryszExeFile, "你的程序名 ")==0)

processid=procentryth32ProcessID; //找到

bFlag=Process32Next(hSnapShot,&procentry);

}

注意一个程序可能有几个实例同时运行,所以可能同时找到几个ID。

首先储存dim shuzhi as long

读出数值ReadProcessMemory pHandle, ByVal lpAddress, ByVal VarPtr(SaveData(0)), shuzhi(读出的数值),dtLen(数值类型),0

直接调用shuzhi

例如要取vsftpd对应的进程号:

ps -ef|grep vsftpd|grep -v grep|awk '{print $2}'

需要注意会不会有多个匹配这个名字的进程返回

1理解

uid:uid 对于 应用来说其实就是指我们当前应用是在那个 group 组内

就是指这个shareuserid,一个组内的uid相同,,并且具有相同的uid的应用才能共享用户内存

pid:是指每个进程在liunx下的 进程的id 是唯一的。

2获取

获取uid:

PackageManager pm = getPackageManager();

ApplicationInfo ai = pmgetApplicationInfo("comspeedsoftwarerootexplorer", PackageManagerGET_ACTIVITIES);

Logd("!!", "!!" + aiuid);

获取pid:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  List<ActivityManagerRunningAppProcessInfo> list = activityManagergetRunningAppProcesses();

for(ActivityManagerRunningAppProcessInfo runningAppProcessInfo : list){

if(runningAppProcessInfopid == pid){

processName = runningAppProcessInfoprocessName;

            }

        }

函数:

ReadProcessMemory()

读取指定进程的内存数据,成功返回0。

参数:

hProcess:进程句柄,必须是可访问进程。

lpBaseAddress:指向进程欲读取的基地址,在数据读取时系统将以此确定读取的数据范围是否可访问。不可访问时 *** 作失败。

lpBuffer:用于接收数据的缓冲地址

nSize:读取的数据字节大小

lpNumberOfBytesRead:返回的实际读取大小,如果为NULL则不返回。

函数:

WriteProcessMemory

写入数据到指定进程的内存,成功返回0。

参数:

hProcess:进程句柄,必须是可访问进程。

lpBaseAddress:指向进程欲写入的基地址。

lpBuffer:写入数据的缓冲地址

nSize:写入的数据字节大小

lpNumberOfBytesRead:返回的实际写入大小,如果为NULL则不返回。

函数:

GetWindowThreadProcessId

得到窗口进程ID

参数:

hWnd:窗口进程

lpdwProcessId:返回进程句柄

返回:

进程ID

函数:

CloseHandle

关闭句柄

参数:

hObject:句柄

函数:

FindWindow

查找窗口

参数:

lpClassName:窗体类名

lpWindowName:窗体名

整个程序定时查找指定窗口是否存在,以判断是否启动该程序,然后启动定时修改指定位置的内存数据

下面的命令就是显示进程名称为cmdexe的pid,不过这里有一个问题就是获得的pid是包括双引号的,这个你要自己再处理一下。

for

/f

"delims=,

tokens=1,2

skip=3"

%%a

in

('tasklist

/fo

csv

/fi

^"imagename

eq

cmdexe^"')

do

echo

%%b

如果是要监听的服务端口,我觉得用 l 参数比较好。

然后如下三种方式请参考。

netstat -nlp | grep -w 端口号 | sed -r 's# ()/#\1#'

netstat -nlp | sed -nr '/端口号/s# ()/#\1#p'

netstat -nlp | awk -F'[ /]' '/端口号/{print $(NF-2)}'

我曾经想用VB做一个注入,但到OpenProcess处总是返回零,无法得到正确结果,尤其是包含写权限时,我估计你的程序问题也出在OpenProcess处,你可以检测一下执行完OpenProcess后,pHandle是否为零

我曾读到一篇文章说,似乎VB下OpenProcess执行就是有问题

以上就是关于c++中怎样根据进程名得到进程pid全部的内容,包括:c++中怎样根据进程名得到进程pid、Vb读取内存的问题(如何调用function里的值)、linux下,有没有方法可以用脚本实现通过进程名获取PID号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9744457.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存