2013-01-05 42 views
-2

我想获得一个进程的主线程ID,我看到有2种方法:GetWindowThreadProcessID和使用TIB获取线程ID有什么区别?

第一是使用线程ID = GetWindowThreadProcessId(HWND,NULL)这hWnd为我们从

要进程的句柄二是使用

_asm 
    { 
     mov eax, fs:[18h] 
     add eax, 36 
     mov [lpThId], eax 
    } 

    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pId); 
    if(hProcess == NULL) 
     return NULL; 

    DWORD tId; 
    ReadProcessMemory(hProcess, lpThId, &tId, sizeof(tId), NULL) == FALSE) 

那么有什么区别?

+0

'GetWindowThreadProcessId'不在进程句柄上运行。我想如果你阅读'GetWindowThreadProcessId'的文档,那么你会看到这两个代码的不同之处。您应该问的问题是:*我如何获得进程的主线程ID?* –

+1

@David:Windows进程没有_main thread_的概念。同样,Windows进程也没有_main window_。所以唯一的问题'GetWindowThreadProcessId'可以回答:哪个线程拥有一个特定的窗口,以及 - 可选的 - 哪个进程拥有这个线程。 SieuTruc应该明确指出他正在努力解决的问题。你和他的问题都无法回答。 – IInspectable

+0

其中,您假设邮件线程仍然存在。 –

回答

2

从MSDN GetWindowThreadProcessId

检索的线程的标识符创建指定的窗口和任选地,创建窗口的过程的标识符。

它与TIB无关。不同的是,这两个是不同的标识符,这可能相当于一个巧合。

+0

那么,对于简单的窗口应用来说,它们往往具有相同的价值吗?因为线程创建的窗口也是主线程?这样对吗 ? – SieuTruc

+0

如果您的代码位于创建感兴趣的窗口的线程上,它们就会匹配。它不一定是“主”线程。 –

相关问题