2009-07-30 5 views
4

プロセス(またはプロセスID)にハンドルを与えられたプロセス内のすべてのスレッドを列挙するにはどうすればよいですか?私はこれを行うことに興味があるので、さらに各スレッドでEnumThreadWindowsを行うことができます。Windowsのスレッドを列挙する

答えて

5

Enumerating threads in a process(MSDNブログ)

コードがそこからの抜粋:

#include <stdio.h> 
#include <windows.h> 
#include <tlhelp32.h> 

int __cdecl main(int argc, char **argv) 
{ 
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); 
if (h != INVALID_HANDLE_VALUE) { 
    THREADENTRY32 te; 
    te.dwSize = sizeof(te); 
    if (Thread32First(h, &te)) { 
    do { 
    if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + 
         sizeof(te.th32OwnerProcessID)) { 
     printf("Process 0x%04x Thread 0x%04x\n", 
      te.th32OwnerProcessID, te.th32ThreadID); 
    } 
    te.dwSize = sizeof(te); 
    } while (Thread32Next(h, &te)); 
    } 
    CloseHandle(h); 
} 
return 0; 
} 
+0

パーフェクト、ありがとう! – bdonlan

+2

必要な主要なAPI関数を少なくともリストしておくとよいでしょう。リンクが壊れてもこの答えが完全に役に立たなくなることはありません(MSDNはURLを変更する傾向があります) –

1

ToolHelpライブラリは、プロセスのスナップショットを作成し、(他のプロパティの中でも)スレッドを列挙するAPIを提供します。 See MSDN for details

関連する問題