首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB获取指定进程的线程,该怎么解决

2012-03-01 
VB获取指定进程的线程如题在网上看到一个C版的,不知能不能翻译成VB的?,谢谢Thefollowingexampleobtainsali

VB获取指定进程的线程
如题
在网上看到一个C版的,不知能不能翻译成VB的?,谢谢
The       following       example       obtains       a       list       of       running       threads       for       the       specified       process.       First,       the       RefreshThreadList       function       takes       a       snapshot       of       the       currently       executing       threads       in       the       system       using       the       CreateToolhelp32Snapshot       function,       then       it       walks       through       the       list       recorded       in       the       snapshot,       using       the       Thread32First       and       Thread32Next       functions.       The       parameter       for       RefreshThreadList       is       the       identifier       of       the       process       whose       threads       will       be       listed.          
       
    #include       <windows.h>      
    #include       <tlhelp32.h>      
    #include       <stdio.h>      
       
    BOOL       RefreshThreadList       (DWORD       dwOwnerPID)          
    {          
                    HANDLE                                   hThreadSnap       =       NULL;          
                    BOOL                                           bRet                                   =       FALSE;          
                    THREADENTRY32       te32                                   =       {0};          
           
                    //       Take       a       snapshot       of       all       threads       currently       in       the       system.          


       
                    hThreadSnap       =       CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,       0);          
                    if       (hThreadSnap       ==       INVALID_HANDLE_VALUE)          
                                    return       (FALSE);          
           
                    //       Fill       in       the       size       of       the       structure       before       using       it.          
       
                    te32.dwSize       =       sizeof(THREADENTRY32);          
           
                    //       Walk       the       thread       snapshot       to       find       all       threads       of       the       process.          
                    //       If       the       thread       belongs       to       the       process,       add       its       information          
                    //       to       the       display       list.      
           
                    if       (Thread32First(hThreadSnap,       &te32))          
                    {          
                                    do          
                                    {          
                                                    if       (te32.th32OwnerProcessID       ==       dwOwnerPID)          
                                                    {          
                                                                    printf(       "\nTID\t\t%d\n ",       te32.th32ThreadID);          


                                                                    printf(       "Owner       PID\t%d\n ",       te32.th32OwnerProcessID);          
                                                                    printf(       "Delta       Priority\t%d\n ",       te32.tpDeltaPri);          
                                                                    printf(       "Base       Priority\t%d\n ",       te32.tpBasePri);          
                                                    }          
                                    }          
                                    while       (Thread32Next(hThreadSnap,       &te32));          
                                    bRet       =       TRUE;          
                    }          
                    else          
                                    bRet       =       FALSE;                                           //       could       not       walk       the       list       of       threads          
           
                    //       Do       not       forget       to       clean       up       the       snapshot       object.          
       
                    CloseHandle       (hThreadSnap);          
           
                    return       (bRet);          
    }          




[解决办法]
http://blog.csdn.net/modest/archive/2006/10/11/1330505.aspx
节选:
Private Function GetThreadList(ByVal ProcessID As Long) As THREADENTRY32()
Dim i As Long
Dim TList() As THREADENTRY32
Dim TE32 As THREADENTRY32
Dim hThreadSnap As Long
Dim TheLoop As Long

hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, ProcessID)
TE32.dwsize = Len(TE32)

TheLoop = Thread32First(hThreadSnap, TE32)
While TheLoop <> 0

If TE32.th32OwnerProcessID = ProcessID Then
ReDim Preserve TList(i)
TerminateThread TE32.th32threadID, 0
TList(i) = TE32
i = i + 1
End If

TheLoop = Thread32Next(hThreadSnap, TE32)
Wend

CloseHandle hThreadSnap
GetThreadList = TList
End Function

热点排行