![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() допустим, мяў Сообщений: 24 057 Спасибо сказали: 13360 раз ![]() |
Есть код на Си.
Код int pid = (ProcessID != 0)? ProcessID : int(GetCurrentProcessId()); HANDLE hss = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (int(hss) == (-1)) return false; THREADENTRY32 thr; thr.dwSize = sizeof(thr); bool ret; try { for (bool loop = Thread32First(hss, &thr); loop; loop = Thread32Next(hss, &thr)) { if ( int(thr.th32OwnerProcessID) != pid) continue; ... HWND mhwnd = 0; EnumThreadWindows(thr.th32ThreadID, (WNDENUMPROC)My1_EnumThreadWndProc, long(&mhwnd)); tnp->Code3 = long(mhwnd); ... } ret = true; } // try catch (...) { ... ret = false; } CloseHandle(hss); return ret; } BOOL CALLBACK My1_EnumThreadWndProc (HWND hwnd // handle to window ,LPARAM lParam // application-defined value ) { *((HWND*)lParam) = hwnd; return false; } Может ли кто-нибудь переложить это на Делфи, оформить в виде функции, принимающей дескриптор процесса, и возвращающий дескриптор окна? Буду благодарен! -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Geoff Snock | 茶スノック Сообщений: 533 Спасибо сказали: 248 раз ![]() |
А что такое
Код tnp->Code3 ?Короче, если tnp.Code3 - это дескриптор окна (out parameter), то: Код function WindowFromProcess(ProcessID: Integer): HWND; var hss: HANDLE; mhwnd: HANDLE; thr: THREADENTRY32; loop: Boolean; function My1_EnumThreadWndProc(hwnd: HWND; lParam: LPARAM): Boolean; begin mhwnd := hwnd; Result := False; end; begin Result := 0; if ProcessID = 0 then ProcessID := GetCurrentProcessID; hss := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if hss = -1 then Exit; thr.dwSize := SizeOf(thr); try loop := Thread32First(hss, @thr); while loop do begin if thr.th32OwnerProcessID <> pid then continue; ... mhwnd := 0; EnumThreadWindows(thr.th32ThreadID, WNDENUMPROC(My1_EnumThreadWndProc), 0); Result := mhwnd; ... loop := Thread32Next(hss, @thr); end; except ... Result := 0; end; CloseHandle(hss); end; Функция возвращает дескриптор окна от дескриптора процесса или 0, если failed. P.S.: Снимаю с себя ответственность за испорченные процессоры и нервные клетки (если таковые будут))). -------------------- гномов сопротивляются заклинанию!
Цитата Фейспалмы свои себе в сракотан засуньте, если больше сказать нечего. |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 26 June 2025 - 18:51 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|