Как получить хэндл дочернего окна через WinAPI

Простейшие вопросы в области инженерной разработки

Как получить хэндл дочернего окна через WinAPI

Postby Igor_G on 19 Mar 2017, 14:44

Добрый день коллеги,
подскажите как получить String хэндл (хэндл дочернего окна) в SubVI через WinAPI (Окно будет одно единственное в SubVI. Поэтому согласно должно работать).
Первый шаг понятен - вызываю FindWindow и получаю хэндл SubVI. А дальше к сожелению не понимаю.
Attachments
String Handle.png
Igor_G
assistant
assistant
 
Posts: 122
Joined: 06 Nov 2011, 14:10
LabVIEW Version: 2012-2015
Karma: 0

Re: Как получить хэндл дочернего окна через WinAPI

Postby dadreamer on 19 Mar 2017, 15:06

FindWindow лучше не использовать, т.к. эта функция ищет окно по заголовку. Если заголовка нет или он совпадает с каким-то другим заголовком, то получите не тот результат, что хотели. В :labview: давно имеется приватный Property Node - FP.NativeWindow (см. тему https://lavag.org/topic/13803-getting-t ... title-bar/ , пост JackDunaway). Куда поместите FP.NativeWindow, тот хэндл и получите (SubVI или основной VI).

А почему вы собираетесь получить хэндл в виде строки? Он вообще-то имеет тип Unsigned Pointer Sized Integer, т.е. U64 в 64-битной среде и U32 в 32-битной.

И что в итоге хотите сделать с этим хэндлом? Может, всё намного проще и с Windows API не надо возиться.
User avatar
dadreamer
doctor
doctor
 
Posts: 2956
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 721
I/O VIP vision internet

Re: Как получить хэндл дочернего окна через WinAPI

Postby Igor_G on 19 Mar 2017, 15:43

Проблема в том что Property Node запрещают работу SubVI в Inline => работа SubVI катастрофически замедляется.
Ну не знаю я как заставить VI работать быстро и использовать Property Node. Поэтому и решил работать с WinAPI (будет работать точно очень быстро).

Через хэндл я хочу делать окраску частей техта в String. Пример показывает мою проблему.
Attachments
1_2_3.png
Igor_G
assistant
assistant
 
Posts: 122
Joined: 06 Nov 2011, 14:10
LabVIEW Version: 2012-2015
Karma: 0

Re: Как получить хэндл дочернего окна через WinAPI

Postby dadreamer on 19 Mar 2017, 16:03

User avatar
dadreamer
doctor
doctor
 
Posts: 2956
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 721
I/O VIP vision internet

Re: Как получить хэндл дочернего окна через WinAPI

Postby Igor_G on 19 Mar 2017, 19:37

С точки зрения WinAPI все (или почти все имет хэндл). Мне нужно получить хэндл стринг индикатора.
NI говорит что это возможно узнать тоже через WinAPI но не говорит как. :o(

Через хэндл стринг индикатора я могу делать окраску техта в String индикаторе с помощью WinAPI и это будет работать в inline.
Igor_G
assistant
assistant
 
Posts: 122
Joined: 06 Nov 2011, 14:10
LabVIEW Version: 2012-2015
Karma: 0

Re: Как получить хэндл дочернего окна через WinAPI

Postby dadreamer on 20 Mar 2017, 03:50

User avatar
dadreamer
doctor
doctor
 
Posts: 2956
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 721
I/O VIP vision internet

Re: Как получить хэндл дочернего окна через WinAPI

Postby Igor_G on 21 Mar 2017, 00:38

Attachments
Str-4-5.pdf
стр. 4
(1.15 MiB) Downloaded 30 times
Str-14-15.pdf
стр. 14
(1.21 MiB) Downloaded 29 times
Igor_G
assistant
assistant
 
Posts: 122
Joined: 06 Nov 2011, 14:10
LabVIEW Version: 2012-2015
Karma: 0

Re: Как получить хэндл дочернего окна через WinAPI

Postby Vitekkz88 on 21 Mar 2017, 11:37

"В windows хэндлы присваиваются чему угодно: окно, меню, иконка, курсор и т.д. Фактически хэндл - это указатель на блок памяти".
Из этого предложения следует понять, что кругом окна. Коль окно - получай хэндл. А если не окно, то хэндл не получай. Конечно же для стороннего приложения так же выделяется память и создаётся хендл. Но дальше начинается шаманство с адресными картами на элементы приложения(в том числе и на элементы GUI). И если вся гуйня сделана на виндовс майкросфтовских компонентах - то конечно же всё будет гут и WinSpy покажет ху из ху. Вон, в интернетах до сих пор гуляет пример с калькулятором. Там всюду окна.
А теперь переходим к LabVIEW:
Компоненты GUI лабвьюшные нифига не окна. Поэтому через WinSpy ничего мы не видим. Резонный вопрос: а как тогда автоматизировать тестирование GUI LabVIEW? Для этого существуют сторонние инструменты, которые как-то там ходят в приложение и дёргают указатели на кнопки(а может и не указатели). И там определенно не чистое WinAPI. Другое дело Activex/.net-control-объекты, они являются особо приближенными к его величество - императору. Ну и палитру "System" можно попробовать пощупать, маловероятно конечно, ну а вдруг? :)
NI Support вас отфутболил прост, а Вы и не поняли :D Попробуйте копать в сторону "hwnd элемента управления" и поглубже, а не только там где в тэгах присутствует слово "LabVIEW".
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
leader
leader
 
Posts: 953
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 258
hardware I/O VIP

Re: Как получить хэндл дочернего окна через WinAPI

Postby dadreamer on 21 Mar 2017, 17:44

User avatar
dadreamer
doctor
doctor
 
Posts: 2956
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 721
I/O VIP vision internet


Return to Для чайников

Who is online

Users browsing this forum: Yahoo and 11 guests

cron