Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› получить ThreadID имея на руках Thread Handle |
Посл.ответ | Сообщение |
|
Создано: 23 июля 2006 00:42 · Поправил: intty · Личное сообщение · #1 собссно сабж. да, я чесно полез в msdn, нашел Process and Thread Functions, нашел чудесную функцию:
но обломался, она только начиная с Windows Server 2003, а мне нужно XP хотябы. есть еще GetProcessIdOfThread, тоже бы сгодилась, но она опять же начиная с WS2003 ладно, я нашел kernel32.dll от WS2003 и посмотрел как она реализована, там вызывается NtQueryInformationThread, но она везде по разному документирована, даже число параметров разное, короче запарился уже, хотя чувствую через нее это делается. короче если у кого какие есть идеи, или кто кускок кода подкинет, или мыслю какую, буду благодарен. ![]() |
|
Создано: 23 июля 2006 00:46 · Личное сообщение · #2 |
|
Создано: 23 июля 2006 00:54 · Личное сообщение · #3 |
|
Создано: 23 июля 2006 01:09 · Личное сообщение · #4 |
|
Создано: 23 июля 2006 08:52 · Личное сообщение · #5 Stiver неет. все не так просто. функции toolhelp позволяют определить принадлежность треда к процессу, если известен Thread ID. А про Thread Handle в структурах THREADENTRY32 и PROCESSENTRY32 не слова. Я даже написал функцию, которая определяет имя процесса по Thread ID. Теперь этот Thread ID мне и нужно получить, а у меня только хендл этого потока, мать его так. ![]() |
|
Создано: 23 июля 2006 09:59 · Личное сообщение · #6 intty А не получится использовать GetWindowThreadProcessId ? The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window. Syntax DWORD GetWindowThreadProcessId( HWND hWnd, LPDWORD lpdwProcessId ); Parameters hWnd [in] Handle to the window. lpdwProcessId [out] Pointer to a variable that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the variable; otherwise, it does not. Return Value The return value is the identifier of the thread that created the window. Handle to the window я получал через FindWindow ----- Research is my purpose ![]() |
|
Создано: 23 июля 2006 14:20 · Личное сообщение · #7 intty А про Thread Handle в структурах THREADENTRY32 и PROCESSENTRY32 не слова. В THREADENTRY32 есть ThreadID, к нему можно получить Thread Handle через OpenThread. Вот только вопрос, можно ли сравнить два хэндла? То есть как-то определить, показывают ли они на один и тот же объект (в данном случае трэд). ![]() |
|
Создано: 23 июля 2006 19:16 · Личное сообщение · #8 Error_Log увы хэндл окна мне не будет известен. да и окна есть не у всех. а мне нужно для всех. так что наверное эта ф-я не поможет. Stiver пишет: равнить два хэндла? То есть как-то определить, показывают ли они на один и тот же объект интересно. в принципе можно подумать. я еще вот здесь решение нашел, через NtQueryInformationThread. hxxps://secure.codeproject.com/win32/Remote.asp?print=true короче буду пробовать. всем спасибо за участие, вопрос пока открыт. ![]() |
|
Создано: 23 июля 2006 21:03 · Личное сообщение · #9 после некоторых мудоханий, удалось это скомпилировать и слинковать ![]() В общем этот код реально работает.
в принципе вопрос исчерпан. ![]() |
![]() |
eXeL@B —› Программирование —› получить ThreadID имея на руках Thread Handle |