精易论坛

标题: 系统_取DOS执行结果 运行起来的程序如何获取他的进程ID [打印本页]

作者: SummerTail    时间: 2024-4-7 09:45
标题: 系统_取DOS执行结果 运行起来的程序如何获取他的进程ID
RT
系统_取DOS执行结果 运行起来的程序如何获取他的进程ID
例如:
系统_取DOS执行结果(test.exe)
我该怎样才能准确的获取到 他运行起来的test.exe的进程id







补充内容 (2024-4-7 10:16):
或者可以让我结束这个进程也可以,不要进程_名取ID 容易误杀

补充内容 (2024-4-8 10:50):
已自行找到解决方案,修改精易模块代码,将dwProcessId传递出来,然后使用 进程_取子进程ID() 即可获取
进程ID = pi.dwProcessId

作者: KongChengY    时间: 2024-4-7 10:00
tasklist /NH /FI "IMAGENAME eq chrome.exe"


补充内容 (2024-4-7 10:02):
写个去其他文本的函数,只保留pid就应该是你要的效果
作者: SummerTail    时间: 2024-4-7 10:15
空城爱你啊 发表于 2024-4-7 10:00
tasklist /NH /FI "IMAGENAME eq chrome.exe"

EDVF2E8.tmp                   9936 Console                    1     25,572 K
取不到
作者: KongChengY    时间: 2024-4-7 10:17
SummerTail 发表于 2024-4-7 10:15
EDVF2E8.tmp                   9936 Console                    1     25,572 K
取不到

你不会是把你调试的进程名投进去了吧?
作者: KongChengY    时间: 2024-4-7 10:19
如果只是单纯取个应用的进程名,可以使用 进程_名取ID()
作者: 蔚枫心蓝    时间: 2024-4-7 10:22
系统_取DOS执行结果()中有用到系统API"CreateProcessA",或者“CreateProcessW”
  
DLL命令名返回值类型公开备 注
CreateProcess整数型 
DLL库文件名:
 
在DLL库中对应命令名:
CreateProcessA
参数名类 型传址数组备 注
lpApplicationName整数型
lpCommandLine文本型
lpProcessAttributes整数型
lpThreadAttributes整数型
bInheritHandles逻辑型
dwCreationFlags整数型
lpEnvironment整数型
lpCurrentDriectory整数型
lpStartupInfoSTARTUPINFO
lpProcessInformationPROCESS_INFORMATION

  
DLL命令名返回值类型公开备 注
CreateProcessW逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CreateProcessW
参数名类 型传址数组备 注
lpApplicationName整数型
lpCommandLine整数型
lpProcessAttributes整数型
lpThreadAttributes整数型
bInheritHandles逻辑型
dwCreationFlags整数型
lpEnvironment整数型
lpCurrentDirectory整数型
lpStartupInfoSTARTUPINFO
lpProcessInformationPROCESS_INFORMATION


其中最后一个参数lpProcessInformation的成员
PROCESS_INFORMATION.dwProcessId
就是运行起来的程序的进程ID






补充内容 (2024-4-7 10:34):
不好意思,搞错了,这个是cmd的进程ID。
作者: SummerTail    时间: 2024-4-7 10:36
蔚枫心蓝 发表于 2024-4-7 10:22
系统_取DOS执行结果()中有用到系统API"CreateProcessA",或者“CreateProcessW”[e=1].版本 2

.DLL命令 C ...

试了一下,获取到的是cmd的进程id
作者: 蔚枫心蓝    时间: 2024-4-7 10:39
SummerTail 发表于 2024-4-7 10:36
试了一下,获取到的是cmd的进程id

是的,不好意思,是我理解错了你的意思。
作者: 东山小道童    时间: 2024-4-7 10:42
如果要取PID的进程有多个,再分割文本即可

e.e

948 KB, 下载次数: 9


作者: 蔚枫心蓝    时间: 2024-4-7 10:43
SummerTail 发表于 2024-4-7 10:36
试了一下,获取到的是cmd的进程id

你可以根据进程名来获取进程ID,多个相同进程名时,你可以先获取进程的命令行,再根据命令行的不同进行区分。
作者: 熬夜    时间: 2024-4-7 11:14
.版本 2

.支持库 spec

.子程序 启动程序并获取进程ID,文本型,参数 程序路径,文本型
    .局部变量 进程ID,整数型
    .局部变量 启动参数,文本型,空文本
    .局部变量 工作目录,文本型,空文本
    .局部变量 进程创建结果,整数型

    工作目录 = 取运行目录() ' 或者设置为程序所在的目录
    启动参数 = 空文本 ' 如果程序需要参数,可以在这里设置
    进程创建结果 = 系统_创建进程(程序路径, 启动参数, 假, 工作目录, 进程ID) ' 假表示不创建新窗口

    如果 (进程创建结果 = 0) 则
        返回 进程ID
    否则
        返回 -1 ' 表示创建进程失败
    结束如果
结束子程序
作者: SummerTail    时间: 2024-4-8 10:49
已自行找到解决方案,修改精益模块代码,将dwProcessId传递出来,然后使用进程_取子进程ID() 即可获取
进程ID = pi.dwProcessId




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4