有什么最简单的办法通过线程ID得到进程名?(200分)

  • 主题发起人 主题发起人 余远源
  • 开始时间 开始时间

余远源

Unregistered / Unconfirmed
GUEST, unregistred user!
用哪几个API?
 
线程ID?是进程ID(ProcessID)吧,光知道一个线程的ID能得到创建这个线程的进程吗?<br><br>知道进程ID的话,这种方式最简单(引用 PSAPI,调用 EnumProcessModules ):<br>//调用这个函数, GetProcessPath(进程ID) ,返回的就是完整的进程名(带路径)<br>function GetProcessPath(PID : Integer): String;<br>var hProcess: THandle;<br> &nbsp; &nbsp;hMod &nbsp; &nbsp;: hModule;<br> &nbsp; &nbsp;cbNeeded: DWORD;<br> &nbsp; &nbsp;szProcessName: array[0..1024] of Char;<br>begin<br> &nbsp;hProcess := OpenProcess(PROCESS_QUERY_INFORMATION OR PROCESS_VM_READ,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FALSE, PID );<br> &nbsp;szProcessName := 'unknown';<br> &nbsp;if (hProcess&lt;&gt;0) then begin<br> &nbsp; &nbsp;if(EnumProcessModules(hProcess,@hMod,sizeof(hMod),cbNeeded)) then begin<br> &nbsp; &nbsp; &nbsp; GetModuleFileNameEx(hProcess,hMod,szProcessName,sizeof(szProcessName));<br> &nbsp; &nbsp; &nbsp; Result := StrPas(szProcessName);<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;CloseHandle(hProcess);<br>end;<br><br><br><br>不用PSAPI的话,用下面这三个就OK:<br>CreateToolhelp32Snapshot 建立进程快照<br>Process32First Process32Next 一个个遍历,找到pID相同的就可以了。
 
是线程ID.<br>进程ID的话当然有办法.<br>知道线程的ID的话,可以用PostThreadMessage给线程发消息PostThreadMessage(*PMainThreadID,WM_QUIT,0,0);<br>这样让线程退出.<br>应该也有办法通过线程名得到程序名吧.
 
有个比较差办法就是遍历所有的进程和相应的线程。<br>也很想知道简单办法。<br>帮你顶一下。
 
用NTQueryInformationThread
 
NTQueryInformationThread只能用于9X以上的系统.
 
GetCurrentThread 和 &nbsp;GetCurrentThreadid
 
算了,接受答案吧.
 
后退
顶部