Автор | Сообщение |
|
| |
Пост N: 563
Зарегистрирован: 17.06.10
|
|
Отправлено: 13.04.18 17:23. Заголовок: Хендл окна из процесса
Всем привет ! Чего-то забыл как получить хендл окна из процесса (оно там одно, но попапное, за заголовок не ухватищь) oList:= oWmi:ExecQuery(.. for each oProc in oList oProc - вот из него получить хендл окна
|
|
|
Ответов - 23
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 6803
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.04.18 17:48. Заголовок: https://www.activexp..
|
|
|
|
| |
Пост N: 564
Зарегистрирован: 17.06.10
|
|
Отправлено: 13.04.18 17:59. Заголовок: И чего ? Всяких сврй..
И чего ? Всяких сврйств много, но хендла окна процесса я не увидел Можно пойти от обратного - прокрутить по Enum все окна и найти принадлежащее нужному мне процессу
|
|
|
|
| |
Пост N: 6804
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.04.18 19:07. Заголовок: fil пишет: И чего ?..
fil пишет: Ты или ссылки не смотрел или я не то дал :) Я про это fil пишет: цитата: | oProc - вот из него получить хендл окна |
| oProc:Handle
|
|
|
|
| |
Пост N: 565
Зарегистрирован: 17.06.10
|
|
Отправлено: 14.04.18 09:28. Заголовок: Ну, некий хендл полу..
Ну, некий хендл получаю. Вот тока сомневаюсь, что это хендл окна Проверил это сделав Parent'ом окно своего приложения - не встраивается
|
|
|
|
| |
Пост N: 1223
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.04.18 09:39. Заголовок: fil пишет: Вот тока..
fil пишет: Чтобы не сомневаться. Найди две маленькие программы 1)WinSpy 2)WmiExplorer Обе бесплатные, и работают без установки. Первая отображает полную инфу о любом окне в системе. Вторая визуализирует Wmi запросы Без них с окнами и вимиаями в слепую можно тыкаться долго)
|
|
|
|
| |
Пост N: 1224
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.04.18 09:44. Заголовок: Haz пишет: некий хе..
Haz пишет: Это хендл процесса
|
|
|
|
| |
Пост N: 1225
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.04.18 10:18. Заголовок: fil пишет: Чего-то ..
fil пишет: цитата: | Чего-то забыл как получить хендл окна из процесса |
| В завершение Только через WMI эту задачу не решишь. Нет в WMI окон процесса. Можно получить хендл процесса, потом хендл потока в котором этот процесс живет. Потом перебирая окна системы сравнивать из какого потока окно с нашим потоком. Возможно есть путь и короче ... я не нашел . Ломаешь чей то софт ? Лучше WinSpy++ посмотри характеристики окна и попробуй выделить уникальные (класс, размеры, стиль, текст в окне , дочерние окна такие как кнопки и надписи на них и пр) и искать уже по этим признакам через перебор окон системы. Хендл процесса ничего тебе не даст , тк то что ты видишь одно окно не гарантирует что у процксса нет еще сотни
|
|
|
|
| |
Пост N: 566
Зарегистрирован: 17.06.10
|
|
Отправлено: 14.04.18 10:30. Заголовок: Возможно...
Возможно.
|
|
|
|
| |
Пост N: 567
Зарегистрирован: 17.06.10
|
|
Отправлено: 14.04.18 11:08. Заголовок: Ну вроде так я его п..
Ну вроде так я его поймал hWn:=GetWindowThreadProcessID(GetForegroundWindow(), oProc:Handle) Хотя, конечно, условие, что искомое приложение на переднем плане..
|
|
|
|
| |
Пост N: 1226
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.04.18 12:53. Заголовок: fil пишет: Ну вроде..
fil пишет: цитата: | Ну вроде так я его поймал |
| Я запутался, ты что ловил то ? GetForegroundWindow() и так возвращает хендл приоритетного( выделенного) окна GetWindowThreadProcessID() - возвращает ID потока который создал указанное в параметрах окно , и также возвращает ID процесса через ссылку в параметрах вроде тебе нужен хендл окна и ты его получил выделив на передним плане через GetForegroundWindow(), тогда к чему огород с GetWindowThreadProcessID
|
|
|
|
| |
Пост N: 1227
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.04.18 12:58. Заголовок: fil пишет: hWn:=Get..
fil пишет: цитата: | hWn:=GetWindowThreadProcessID(GetForegroundWindow(), oProc:Handle) |
| oProc:Handle в этот параметр (если задан) копируется ID процесса который создал окно а не наоборот hWn - это правильнее обозначить как hTh т.к. это хендл потока вызов такой hTh := GetWindowThreadProcessID(hWnd, @hPid) в hTh запишется хендл потока , который создал hWnd в hPid запишется хендл процесса, который создал hWnd таким образом перебирая все окна и скармливая их в GetWindowThreadProcessID() сравниваем полученный hPid с oProc:Handle и если совпали то это окно создано из процесса oProc:Handle Пример перебора окон на форуме был , я точно кидал в теме по Excel
|
|
|
|
|
| |
Пост N: 568
Зарегистрирован: 17.06.10
|
|
Отправлено: 14.04.18 14:11. Заголовок: GetForegroundWindow ..
Haz это да, каюсь перемудрил. Очень уж хотелось прямо из процесса окно достать. Ну через Enum сделаю. Спасибо
|
|
|
|
| постоянный участник
|
Пост N: 5866
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.05.18 17:02. Заголовок: Dima пишет: http:/..
Dima пишет: WsaStartUp() if upper(cEquipo) == "LOCAL" cIP := GetHostByName( GetHostName() ) //IP equipo local elseif upper(cEquipo) == "SERVIDOR" cIP := GetHostByName(cNombServ) //IP equipo en red segun nombre dado endif //GetHostByAddress("192.168.0.14") // NOMBRE del equipo en RED segun IP dada WsaCleanUp() Не нашёл чем заменить в МиниГиу функции GetHostName() и GetHostByName( GetHostName() ) . Нашёл 3 библиотеки: C:\MiniGUI\Harbour\lib\ hbrtl.lib libeay32.lib socket.lib Какую использовать нужно для Харбора ? Перепробовал все, всё равно ошибка компиляции: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_WSASTARTUP' referenced from \OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_GETHOSTNAME' referenced from \OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_GETHOSTBYNAME' referenced from \OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_WSACLEANUP' referenced from \OBJ\DEMO.OBJ Вот код программы: ? "." WsaStartUp() ? "GetHostName() - ", GetHostName() ? "GetHostByName( GetHostName() ) - ", GetHostByName( GetHostName() ) WsaCleanUp() Может ещё чего нужно прикрутить для этого кода ? IP адрес компа определяю через функцию, которую ранее давал Григорий. http://clipper.borda.ru/?1-4-0-00000393-000-0-0-1526386398
|
|
|
|
| |
Пост N: 6827
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.18 17:45. Заголовок: Andrey пишет: Не на..
Andrey пишет: цитата: | Не нашёл чем заменить в МиниГиу функции GetHostName() и GetHostByName( GetHostName() ) . |
| Мыло кинь мне в личку закину....впрочем налью наверное к Сергею на Ftp :) PS Налил в твою папку
|
|
|
|
| moderator
|
Пост N: 1277
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.05.18 17:47. Заголовок: Andrey пишет: Не на..
Andrey пишет: цитата: | Не нашёл чем заменить в МиниГиу |
| Лови HB_FUNC ( WSASTARTUP ) { WSADATA wsa; hb_retni( WSAStartup( 0x101, &wsa ) ); } HB_FUNC ( WSACLEANUP ) { hb_retni( WSACleanup() ); } HB_FUNC ( GETHOSTNAME ) { BYTE Name[ 255 ]; gethostname( ( char * ) Name, 255 ); hb_retc( ( char * ) Name ); } HB_FUNC (GETHOSTBYNAME) { struct hostent * pHost; BYTE addr[ 20 ]; strcpy( ( char * ) addr, "0.0.0.0" ); pHost = gethostbyname( ( char * ) hb_parc( 1 ) ) ; if( pHost ) { wsprintf( ( char * ) addr, "%i.%i.%i.%i", ( BYTE ) pHost->h_addr[ 0 ], ( BYTE ) pHost->h_addr[ 1 ], ( BYTE ) pHost->h_addr[ 2 ], ( BYTE ) pHost->h_addr[ 3 ] ); } hb_retc( ( char * ) addr ); }
|
|
|
|
| |
Пост N: 6828
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.18 17:50. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Поздно , уже дал ему от FW
|
|
|
|
| постоянный участник
|
Пост N: 5868
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.05.18 17:52. Заголовок: Спасибо вам БОЛЬШОЕ ..
Спасибо вам БОЛЬШОЕ !!! А чем заменить #include <fwh.h> в winsock.c ? За комментировал, всё равно не собирает: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_fw_parH' referenced from W:\HB_PROJECT WINSOCK.OBJ
|
|
|
|
| |
Пост N: 6829
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.18 17:55. Заголовок: Andrey пишет: А чем..
Andrey пишет: цитата: | А чем заменить #include <fwh.h> в winsock.c ? |
| Налил и его , впрочем можно использовать что дал Григорий
|
|
|
|
| постоянный участник
|
Пост N: 5869
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.05.18 18:00. Заголовок: Вот код: #ifdef __HA..
Вот код: #ifdef __HARBOUR__ HB_FUNC( WSAASYNCSELECT ) // ( nSocket, nHWnd, nMsg, nModes ) --> nReturn #else HB_FUNC( WSAASYNCSE ) // LECT( nSocket, nHWnd, nMsg, nModes ) --> nReturn #endif { hb_retni( WSAAsyncSelect( hb_parni( 1 ), ( HWND ) fw_parH( 2 ), hb_parni( 3 ), hb_parnl( 4 ) ) ); } Только в одном месте такое. Подойдёт ли замена ( HWND ) fw_parH( 2 ) на ( HWND ) hb_parH( 2 ) ? P.S. Не подошла.... Чем можно заменить ? P.S.S. Нашёл чем заменить. Взял из fwh.h #ifndef _WIN64 #define fw_parH( i ) ( (HANDLE) hb_parnl( i ) ) #define fw_retnll( l ) hb_retnl( (LONG) l ) #else #define fw_parH( i ) ( (HANDLE) hb_parnll( i ) ) #define fw_retnll( l ) hb_retnll( (LONGLONG) l ) #endif
|
|
|
|
| постоянный участник
|
Пост N: 5870
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.05.18 18:06. Заголовок: Dima пишет: Налил и..
Dima пишет: цитата: | Налил и его , впрочем можно использовать что дал Григорий |
| Да, можно и его, но там больше функций. Вдруг пригодятся... Залил к Сергею пример. Посмотри его, может что и посоветуешь.
|
|
|
|
| |
Пост N: 6830
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.05.18 21:26. Заголовок: Andrey пишет: Вдруг..
Andrey пишет: Может и нет , Григорий дал тебе самодостаточный ответ.
|
|
|
|
|
| постоянный участник
|
Пост N: 1578
Зарегистрирован: 09.10.06
|
|
Отправлено: 17.05.18 07:08. Заголовок: Andrey пишет: Нашёл..
Andrey пишет: цитата: | Нашёл 3 библиотеки: C:\MiniGUI\Harbour\lib\ hbrtl.lib socket.lib |
| Нашел - пользуйся HB_SOCKETGETHOSTS( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> aHosts и др. Не ищи костыли - учи лучше Harbour
|
|
|
|
| постоянный участник
|
Пост N: 5875
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.05.18 19:46. Заголовок: Петр пишет: Не ищи ..
Петр пишет: цитата: | Не ищи костыли - учи лучше Harbour |
| Подскажи пожалуйста, как тогда заменить этот код на чистом Харборе ? WsaStartUp() ? "GetHostName() - ", GetHostName() ? "GetHostByName( GetHostName() ) - ", GetHostByName( GetHostName() ) WsaCleanUp() Очень интересна функция опроса наличия компа в локальной сети, если его нет то возвращает: GetHostByName( 'SERVER' ) -> 0.0.0.0 Не знал об этом. Делал по другому.
|
|
|
Ответов - 23
, стр:
1
2
All
[только новые]
|
|