MFC如何获取指定进程的PID

MFC如何获取指定进程的PID,第1张

要取指定进程的ID,如果指定的进程是一个窗口相关的,而你又可以用 FindWindowEx 来取得他的 HWND 的话,那么就可以用 GetWindowThreadProcessId(HWND,&ID) 来取得ID值的

基本思路就是遍历所有的进程

BOOL GetProcessIdByName(LPTSTR szProcessName, LPDWORD lpPID)

{

// 变量及初始化

STARTUPINFO st;

PROCESS_INFORMATION pi;

PROCESSENTRY32 ps;

HANDLE hSnapshot;

ZeroMemory(&st, sizeof(STARTUPINFO));

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

stcb = sizeof(STARTUPINFO);

ZeroMemory(&ps,sizeof(PROCESSENTRY32));

psdwSize = sizeof(PROCESSENTRY32);

// 遍历进程

hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);

if(hSnapshot == INVALID_HANDLE_VALUE)

{

return FALSE;

}

if(!Process32First(hSnapshot,&ps))

{

return FALSE;

}

do

{

// 比较进程名

if(lstrcmpi(psszExeFile,szProcessName)==0)

{

// 找到了

lpPID = psth32ProcessID;

CloseHandle(hSnapshot);

return TRUE;

}

}

while(Process32Next(hSnapshot,&ps));

// 没有找到

CloseHandle(hSnapshot);

return FALSE;

}

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

for

/f

"delims=,

tokens=1,2

skip=3"

%%a

in

('tasklist

/fo

csv

/fi

^"imagename

eq

cmdexe^"')

do

echo

%%b

如果我给NeMaC的参数不同,用上述指令会列出所有NeMaC命令执行的信息

但是我只想获取其中ture command为

还是得到了两个PID值,因为我同时使用了两个NeMaC命令(在不同命令窗口输入)

一条是NeMaC -c 30 -m 25000 -r rulessample 20210101 private rule1

一条是NeMaC -c 120 -m 25000 -r cs2rules 20210101 private rule2

谢谢,另外,NeMaC是NeTraMet这个分析流的工具的一个组件。学习中分成两个脚本执行。请教中,如何用两脚本,要是对应NeMaC有N个进程呢?那又该如何是好换一个思路吧,我如何能得到一个进程的唯一子进程的pid?:用

ps -C NeMaC -f | grep rule1 | awk '{print $2}'

我已经能拿到想要kill的进程的pid了,其值例如为:12815

但是当我执行如下shell文件时确出错了

#!/bin/bash#PATH=“$PATH”:/home/gwei/myCode#myNeMaC=——ps -C NeMaC -f | grep myNeMaC1 | awk '{print $2}'——

kill -9 $myNeMaC它显示出来的错误信息是

: arguments must be process or job IDskill: 12815

kill -9 $myNeMaC

也可以杀掉进程,但是把上面这些写入一个。sh文件再执行就出错了怎麼办呢?移植到RH9後提示的错误信息是:

[root@gxnunc0504 myCode]# /bin/bash /killNeMaC1sh

: no such pidsh: line 6: kill: 21820

kill -9 $myNeMaC

上面就是我杀掉进程的教本killNeMaC1,其中echo $myNeMaC确认只剩下一个PID了,可是为什麼到了kill -9 $myNeMaC就运行不下去了呢。相关 *** 作和结果如下:

Process[] localByName = ProcessGetProcessesByName("QQ");

if (localByNameLength != 0)

{

foreach (Process a in localByName)

{

int pid = aId;

}

}

在dos下可以这样 tasklist /FI "IMAGENAME eq explorerexe" 基于此可以'给你个简单方便的程序

'创建如下控件:

'Command1,Text1,Timer1

'单击按钮,稍候片刻,在Text2中显示结果。

'===========================

Const p = "d:\atxt"

Private Sub Command1_Click()

Timer1Enabled = True

Timer1Interval = 1000

Text1Text = ""

Dim t As String

Shell "cmd /c echo >""d:\atxt""" '创建空文件

Shell "cmd /c" & "tasklist /FI ""IMAGENAME eq explorerexe""" & ">" & p '读取任务PID

End SubPrivate Sub Form_Load()

Timer1Enabled = FalseEnd SubPrivate Sub Timer1_Timer() '读取文件

Open p For Input As #1

Do While EOF(1) = False

Line Input #1, t

SS = SS + Trim(t)

Loop

Close #1

Text1Text = "PID=" & Split(Split(SS, "explorerexe")(1), "Console")(0) ‘提取字段

Timer1Enabled = False

End Sub

以上就是关于MFC如何获取指定进程的PID全部的内容,包括:MFC如何获取指定进程的PID、C++如何通过进程名取得PID(只用Windows API)、如何从批处理文件中获取进程PID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9663971.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存