C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···

C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···,第1张

没事做,写个详细代码给你吧

#include<windowsh>

#include<tlhelp32h>//声明快照函数的头文件

int main(int argc,char argv[])

{

PROCESSENTRY32 pe32;

//在使用这个结构之前,先设置它的大小

pe32dwSize=sizeof(pe32);

//给系统内的所有进程拍一个快照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//遍历进程快照,轮流显示每个进程的信息

BOOL bMore=::Process32First(hProcessSnap,&pe32);

while(bMore)

{

if(strcmp("abcexe",pe32szExeFile)==0)//如果找到进程名为abcexe

{

HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32th32ProcessID);//获取句柄

/这里已经打开那个进程的句柄了/ }

bMore=::Process32Next(hProcessSnap,&pe32);//寻找下一个

}

return 0;

}

通过  取系统进程列表() 命令取出所有进程,然后在其中找出你想获取的进程名,就可以取出相应的进程ID。刚刚写了一个   取进程名+取进程ID  的小程序,纯手打,源码很简单,就几行,应该很好理解,如果还有不明白的可以追问,我在线解决,谢谢。

windows每个进程都有自己的地址空间。openprocess打开进程,readprocessmemory读进程数据,writeprocessmemory写进程数据。难点在于找到你想读的数据在进程地址空间中的偏移即相对地址

Imports SystemRuntimeInteropServices

Module winapi

    <DllImport("User32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="GetWindowThreadProcessId")> _

    Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef procId As UInt32) As UInt32

    End Function

    <DllImport("kernel32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="OpenProcess")> _

    Function OpenProcess(ByVal access As UInt32, ByVal inherit As Boolean, ByVal procid As UInt32) As IntPtr

    End Function

    <DllImport("kernel32dll", CallingConvention:=CallingConventionStdCall, EntryPoint:="CloseHandle")> _

    Function CloseHandle(ByVal handle As IntPtr) As Boolean

    End Function

    <DllImport("psapidll", CallingConvention:=CallingConventionStdCall, EntryPoint:="GetModuleFileNameExW", Charset:=CharSetUnicode)> _

    Function GetModuleFileNameExW(ByVal hProc As IntPtr, ByVal hMod As IntPtr, ByVal arrName() As Char, ByVal arrSize As UInt32) As UInt32

    End Function

End Module

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1Click

        Dim procid As UInt32

        GetWindowThreadProcessId(MeHandle, procid)

        Dim handle As IntPtr

        handle = OpenProcess(1040, False, procid)

        Dim name(65536) As Char

        Dim nameSize As UInt32 = GetModuleFileNameExW(handle, IntPtrZero, name, 65536)

        Dim strName As String = New String(name, 0, nameSize)

        CloseHandle(handle)

        MsgBox(strName)

    End Sub

End Class

可恶……我不会vb……临时去七拼八凑查了点语法……尽力了

Process p = ProcessGetProcessById(id)

设p为指定id的进程

那么,Process类有 属性

MainWindowHandle 获取关联进程主窗口的窗口句柄。

MainWindowTitle 获取进程的主窗口标题。

也就是

pMainWindowHandle

pMainWindowTitle

到于主程序类名,不好意思,windows可执行程序不一定是用C#写的哦,所以“不存在”主程序类名这种东西。

以上就是关于C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···全部的内容,包括:C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···、易语言如何获取指定进程的ID、C语言怎么样通过进程名把它对应的内存里的数据取出来呀!!!取出来之后能不能保存下来呢 API怎么用呀等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9468192.html

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

发表评论

登录后才能评论

评论列表(0条)

保存