怎样得到线程ID号?
已知一个正在运行的进程名称(第三方程序),怎样得到其主线程的id号? 问题点数:26、回复次数:18Top
1 楼xuefl66(xuefl66)回复于 2002-10-22 22:23:17 得分 1
关注中。。。Top
2 楼apao(脑子进水了)回复于 2002-10-23 09:12:18 得分 0
有人知道吗?Top
3 楼foxustc(科狐)回复于 2002-10-23 09:46:44 得分 1
我也想知道Top
4 楼foxustc(科狐)回复于 2002-10-23 09:48:00 得分 1
up一把Top
5 楼zhangyilan(数字通信)回复于 2002-10-23 09:52:11 得分 6
#include "stdafx.h"
#include "Tlhelp32.h"
#include <stdio.h>
int main()
{
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
long FindProcessID=-1;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
{
printf("\nCreateToolhelp32Snapshot() failed:%d",GetLastError());
return 1;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
char *strProcessName="Qnbvc Q";
do
{
char *strUpperExeFile=strupr(pe32.szExeFile);
if(strstr(strUpperExeFile,strProcessName))
{
FindProcessID=pe32.th32ProcessID;
break;
}
}
while (Process32Next(hProcessSnap, &pe32));
}
if(FindProcessID>0)
{
char str[200];
sprintf(str,"msdev -p %d",FindProcessID);
printf("%s",str);
//system(str);
}
CloseHandle (hProcessSnap);
return 0;
}
Top
6 楼bendou16(跳动的心)回复于 2002-10-23 10:17:08 得分 2
EnumProcesses
OpenProcess
EnumProcessModulesTop
7 楼apao(脑子进水了)回复于 2002-10-23 13:24:09 得分 0
谢谢大家!
zhangyilan(数字通信) :非常感谢,但是你的程序只是得到进程的ID号,那线程的ID号呢?条件放松一点,假设是单线程的。
bendou16(跳动的心) :能详细点吗?谢谢Top
8 楼bendou16(跳动的心)回复于 2002-10-23 15:23:43 得分 1
不太清楚由进程句柄得到线程idTop
9 楼fire_zxv(辉)回复于 2002-10-23 15:39:58 得分 6
AfxGetThread
CWinThread* AfxGetThread( );
Return Value
Pointer to the currently executing thread.
Remarks
Call this function to get a pointer to the CWinThread object representing the currently executing thread. Must be called from within the desired thread.
Example
//Print the current thread ID in the Debug Window
TRACE("Current Thread ID = 0x%X\n", AfxGetThread()->m_nThreadID);
或者这样也可以
CWinThread* pThread = AfxBeginThread((AFX_THREADPROC)ComputeThreadProc, LPVOID(this));
TRACE("Current Thread ID = 0x%X\n", pThread->m_nThreadID);
Top
10 楼apao(脑子进水了)回复于 2002-10-23 16:05:19 得分 0
fire_zxv(辉) : 我想要的是一个已经运行的别的程序的主线程ID(现在假设是单线程程序),而不是当前线程IDTop
11 楼sunyanzi()回复于 2002-10-24 11:17:02 得分 1
UPTop
12 楼apao(脑子进水了)回复于 2002-10-24 20:34:58 得分 0
upupupTop
13 楼zhangyilan(数字通信)回复于 2002-10-25 10:48:20 得分 2
看看这一篇文章
http://www.codeproject.com/system/ntenumthreads.aspTop
14 楼apao(脑子进水了)回复于 2002-11-04 15:10:07 得分 0
uTop
15 楼panch(江湖小子)回复于 2002-11-05 14:33:46 得分 2
其实只要一个函数就行了!
DWORD dwThreadId=GetProcessIdFromName("NOTEPAD.EXE");Top
16 楼xikug(xIkUg)回复于 2002-11-05 14:46:36 得分 2
别的线程是吧???
好吧:
HWND hWnd = FindWindow(NULL, "计算器") ;
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, NULL) ;
dwThreadID就是"计算器"线程ID了Top
17 楼Hu0dingX(火丁)回复于 2002-11-10 18:34:44 得分 1
??Top
18 楼apao(脑子进水了)回复于 2002-12-09 09:21:23 得分 0
谢谢各位,明天结帖Top




