没事做,写个详细代码给你吧
#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怎么用呀等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)