On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 563
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 13.04.18 17:23. Заголовок: Хендл окна из процесса


Всем привет !

Чего-то забыл как получить хендл окна из процесса (оно там одно, но попапное, за заголовок не ухватищь)

oList:= oWmi:ExecQuery(..
for each oProc in oList
oProc - вот из него получить хендл окна

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 23 , стр: 1 2 All [только новые]


администратор




Пост N: 6803
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.18 17:48. Заголовок: https://www.activexp..

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 564
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 13.04.18 17:59. Заголовок: И чего ? Всяких сврй..


И чего ? Всяких сврйств много, но хендла окна процесса я не увидел

Можно пойти от обратного - прокрутить по Enum все окна и найти принадлежащее нужному мне процессу

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6804
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.18 19:07. Заголовок: fil пишет: И чего ?..


fil пишет:

 цитата:
И чего ?


Ты или ссылки не смотрел или я не то дал :)
Я про это
fil пишет:

 цитата:
oProc - вот из него получить хендл окна


oProc:Handle

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 565
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 14.04.18 09:28. Заголовок: Ну, некий хендл полу..


Ну, некий хендл получаю. Вот тока сомневаюсь, что это хендл окна
Проверил это сделав Parent'ом окно своего приложения - не встраивается

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1223
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.04.18 09:39. Заголовок: fil пишет: Вот тока..


fil пишет:

 цитата:
Вот тока сомневаюсь,


Чтобы не сомневаться. Найди две маленькие программы
1)WinSpy
2)WmiExplorer
Обе бесплатные, и работают без установки.
Первая отображает полную инфу о любом окне в системе.
Вторая визуализирует Wmi запросы
Без них с окнами и вимиаями в слепую можно тыкаться долго)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1224
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.04.18 09:44. Заголовок: Haz пишет: некий хе..


Haz пишет:

 цитата:
некий хендл получаю.


Это хендл процесса

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1225
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.04.18 10:18. Заголовок: fil пишет: Чего-то ..


fil пишет:

 цитата:
Чего-то забыл как получить хендл окна из процесса


В завершение
Только через WMI эту задачу не решишь. Нет в WMI окон процесса.
Можно получить хендл процесса, потом хендл потока в котором этот процесс живет. Потом перебирая окна системы сравнивать из какого потока окно с нашим потоком.
Возможно есть путь и короче ... я не нашел .
Ломаешь чей то софт ?
Лучше WinSpy++ посмотри характеристики окна и попробуй выделить уникальные (класс, размеры, стиль, текст в окне , дочерние окна такие как кнопки и надписи на них и пр) и искать уже по этим признакам через перебор окон системы. Хендл процесса ничего тебе не даст , тк то что ты видишь одно окно не гарантирует что у процксса нет еще сотни

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 566
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 14.04.18 10:30. Заголовок: Возможно...


Возможно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 567
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 14.04.18 11:08. Заголовок: Ну вроде так я его п..


Ну вроде так я его поймал

hWn:=GetWindowThreadProcessID(GetForegroundWindow(), oProc:Handle)

Хотя, конечно, условие, что искомое приложение на переднем плане..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1226
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.04.18 12:53. Заголовок: fil пишет: Ну вроде..


fil пишет:

 цитата:
Ну вроде так я его поймал


Я запутался, ты что ловил то ?
GetForegroundWindow() и так возвращает хендл приоритетного( выделенного) окна
GetWindowThreadProcessID() - возвращает ID потока который создал указанное в параметрах окно , и также возвращает ID процесса через ссылку в параметрах

вроде тебе нужен хендл окна и ты его получил выделив на передним плане через GetForegroundWindow(), тогда к чему огород с GetWindowThreadProcessID


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 568
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 14.04.18 14:11. Заголовок: GetForegroundWindow ..



 цитата:
GetForegroundWindow



Haz это да, каюсь перемудрил. Очень уж хотелось прямо из процесса окно достать. Ну через Enum сделаю. Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5866
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.18 17:02. Заголовок: Dima пишет: http:/..


Dima пишет:

 цитата:

http://fivetechsupport.com/forums/viewtopic.php?f=3&t=29279



 
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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6827
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.05.18 17:45. Заголовок: Andrey пишет: Не на..


Andrey пишет:

 цитата:
Не нашёл чем заменить в МиниГиу функции GetHostName() и GetHostByName( GetHostName() ) .


Мыло кинь мне в личку закину....впрочем налью наверное к Сергею на Ftp :)

PS
Налил в твою папку

Спасибо: 0 
ПрофильЦитата Ответить
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 );
}


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6828
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.05.18 17:50. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Лови


Поздно , уже дал ему от FW

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6829
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.05.18 17:55. Заголовок: Andrey пишет: А чем..


Andrey пишет:

 цитата:
А чем заменить #include <fwh.h> в winsock.c ?


Налил и его , впрочем можно использовать что дал Григорий

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5870
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.18 18:06. Заголовок: Dima пишет: Налил и..


Dima пишет:

 цитата:
Налил и его , впрочем можно использовать что дал Григорий



Да, можно и его, но там больше функций. Вдруг пригодятся...
Залил к Сергею пример. Посмотри его, может что и посоветуешь.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6830
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.05.18 21:26. Заголовок: Andrey пишет: Вдруг..


Andrey пишет:

 цитата:
Вдруг пригодятся...


Может и нет , Григорий дал тебе самодостаточный ответ.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Не знал об этом. Делал по другому.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 23 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 17
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет