Все путем, не паникуй. Вот код код для GetCurrentThread:
.text:77E86AD6 _GetCurrentThread@0 proc near
.text:77E86AD6 push 0FFFFFFFEh
.text:77E86AD8 pop eax
.text:77E86AD9 retn
.text:77E86AD9 _GetCurrentThread@0 endp
Просто 0FFFFFFFEh этвсегда хендл текущего потока (с процессами кстати тоже самое, только там 0FFFFFFFFh), так что в контексте потока всем функциям принимающим хендл на поток можешь смело это значение передавать...
Кто нть может объяснить мне в чем дело и чем лечить:
GetCurrentThread() возвращает всегда FFFFFFFE??????
Что за бред???
К примеру, создаю поток hThread=CreateThread....
Вызываю GetCurrentThread() из нового потока и получаю fffffffE... хотя настоящий hThread был нормальный (0x0fc3 к примеру итд... причем менялся каждый новый раз)...!!!!!!!
такая фигня происходит везде! во всех потоках...
???????
что происходит? у меня на машине дьявол?
[Win32] Глюки!!! Хелп!!!29.05.02 09:23 Автор: SerpentFly <Vadim Smirnov> Статус: Member
Все путем, не паникуй. Вот код код для GetCurrentThread:
.text:77E86AD6 _GetCurrentThread@0 proc near
.text:77E86AD6 push 0FFFFFFFEh
.text:77E86AD8 pop eax
.text:77E86AD9 retn
.text:77E86AD9 _GetCurrentThread@0 endp
Просто 0FFFFFFFEh этвсегда хендл текущего потока (с процессами кстати тоже самое, только там 0FFFFFFFFh), так что в контексте потока всем функциям принимающим хендл на поток можешь смело это значение передавать...
ок.
а как получить хендл чужого потока? да еще и из другого процесса?
win9x этого не умеет. OpenThread токо с winME пошел.
но вот проги типа TaskInfo, ProcExplorer их как то достают..
автор ProcExplorer сказал что он читал их из внутренних структур а из каких и как не сказал...
может кто подскажет..
может ребят вы знаете?
[Win32] можно и под W9829.05.02 18:16 Автор: ukv Статус: Незарегистрированный пользователь
Вот мой примерчик, закрывающий окно hwnd в другом процессе
(с ожиданием результата). Вроде тут есть доступ и к процессу, и к потоку:
DWORD pid;
HANDLE hproc;
GetWindowThreadProcessId(hwnd,&pid);
hproc = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
::PostMessage(hwnd, WM_CLOSE, 0, 0);
WaitForInputIdle(hproc,INFINITE);
CloseHandle(hproc);
[C++] [Win32] можно и под W98:: нет, нельзя29.05.02 18:34 Автор: BXS Статус: Незарегистрированный пользователь Отредактировано 29.05.02 18:35 Количество правок: 1
> Вот мой примерчик, закрывающий окно hwnd в другом процессе > (с ожиданием результата). Вроде тут есть доступ и к > процессу, и к потоку: > DWORD pid; > HANDLE hproc; > GetWindowThreadProcessId(hwnd,&pid); > hproc = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid); > ::PostMessage(hwnd, WM_CLOSE, 0, 0); > WaitForInputIdle(hproc,INFINITE); > CloseHandle(hproc);
в том то и дело что нет.
ты не получаешь хендл удаленного потока. система сама это реализует внутри себя. поэтому PostMessage работает. естественно, винда знает как получать хендлы, но документированного способа не дает. приходица изварачиваца.... как именно - я не знаю....
скачал kernel32.dll и winME но ясно дело loadlibrary не захотела его читать... ну эт я так, для самокнтроля... для симуляции деятельности.. (((