Labview portal - перегляд теми - як отримати хендл дочірнього вікна через winapi

Доброго дня колеги,
підкажіть як отримати String хендл (хендл дочірнього вікна) в SubVI через WinAPI (Вікно буде одне єдине в SubVI. Тому згідно dadreamer має працювати).
Перший крок зрозумілий - викликаю FindWindow і отримую хендл SubVI. А далі нажаль не розумію.

А чому ви збираєтеся отримати хендл у вигляді рядка? Він взагалі-то має тип Unsigned Pointer Sized Integer, тобто U64 в 64-бітної середовищі і U32 в 32-бітної.

І що в результаті хочете зробити з цим хендлом? Може, все набагато простіше і з Windows API не треба возитися.

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

Через хендл я хочу робити забарвлення частин техта в String. Приклад показує мою проблему.

Igor_G писал (а): Проблема в тому що Property Node забороняють роботу SubVI в Inline => робота SubVI катастрофічно сповільнюється.


Тут скоріше справа в тому, що більшість (відсотків 90) Property / Invoke Nodes працює в UI потоці, а він один на весь додаток. Але так, вказане властивість не можна використовувати в інлайн-сабвее.

Igor_G писал (а): Тому і вирішив працювати з WinAPI (буде працювати точно дуже швидко).


Вказуйте тоді і клас вікна, щоб мінімізувати ймовірність помилкових результатів. Тема також можна зробити якщо не унікальним, то хоча б оригінальним для вашого застосування.

Igor_G писал (а): Через хендл я хочу робити забарвлення частин техта в String. Приклад показує мою проблему.


Чесно, не розумію, яке відношення має hwnd вікна до стринг контролю (індикатору). Як ви зібралися розфарбовувати контрол (індикатор) за допомогою цього хендлом?

З точки зору WinAPI все (або майже все имет хендл). Мені потрібно отримати хендл стринг індикатора.
NI каже що це можливо дізнатися теж через WinAPI але не каже як. o (

Через хендл стринг індикатора я можу робити забарвлення техта в String індикаторі за допомогою WinAPI і це буде працювати в inline.

Igor_G писал (а): З точки зору WinAPI все (або майже все имет хендл).


Дивлячись який. HWND - це тільки віконця.

Igor_G писал (а): Мені потрібно отримати хендл стринг індикатора.


Чи не отримаєте. Бо у нього його немає.

Igor_G писал (а): NI каже що це можливо дізнатися теж через WinAPI але не каже як. o (


Бред, у об'єктів на FP немає ніяких хендлом, інакше було б неможливо забезпечити крос-платформенность. WinSpy теж не в силах щось показати. Пруф, якщо впевнені в зворотному.

Igor_G писал (а): Через хендл стринг індикатора я можу робити забарвлення техта в String індикаторі за допомогою WinAPI і це буде працювати в inline.


А поки - удачі в реалізації рішення.

З.И. а все-таки, виконувати роботу з GUI під времякрітічних підпрограма - не є добре.

Дивлячись який. HWND - це тільки віконця.


Вибачте, але дозвольте з Вами не погодиться. Читаємо уважно відскановану стор. 14.

Чи не отримаєте. Бо у нього його немає.

Бред, у об'єктів на FP немає ніяких хендлом, інакше було б неможливо забезпечити крос-платформенность. WinSpy теж не в силах щось показати. Пруф, якщо впевнені в зворотному.


Kросс-платформенность забезпечується тому-що Чарльз Сімонаі був далеко не дурною людиною - (див. Відскановану стор. 4).

На цьому академічну перепалку хотілося б закінчити і повернутися до початкового питання.

Як визначено Хендел ЕЛЕМЕНТА НА FP?
Те що це можливо - це факт. Це мені відповів NI Support і дав лінк на цю сторінку. Це-ж я читав десь в LAVA (на жаль знайти сьогодні лінк більше не можу).
Чи не вже чи ні у кого немає ідей? Не невже це насправді ні хто не пробував?

Вкладення Str-4-5.pdf стор. 4 (1.15 МБ) Завантажень: 22 Str-14-15.pdf стр. 14 (1.21 МБ) Завантажень: 20

Інженер - це відкрито світиться інтелект, вільний і не образливий гумор, це легкість і широта думки. Це вихованість, тонкість смаків, хороша мова, плавно узгоджена і без бур'янів слівець.
-А. І. Солженіцин

Igor_G писал (а): Вибачте, але дозвольте з Вами не погодиться. Читаємо уважно відскановану стор. 14.


Цікаво, з чим саме ви не погодилися? Я все коректно написав. Ще раз:

dadreamer писал (а): Дивлячись який. HWND - це тільки віконця.


Те, що в Windows хендлом повсюдно використовуються, зовсім не секрет для скільки-небудь просунутого користувача. І це ніхто не заперечував ні разу. А ось тип хендлом HWND управляє тільки вікнами. Цитата звідси:

Windows are objects - they have both code and data - but they are not C ++ classes. Instead, a program references a window by using a value called a handle. A handle is an opaque type. Essentially, it is just a number that the operating system uses to identify an object. You can picture Windows as having a big table of all the windows that have been created. It uses this table to look up windows by their handles. (Whether that's exactly how it works internally is not important.) The data type for window handles is HWND. which is usually pronounced "aitch-wind." Window handles are returned by the functions that create windows: CreateWindow and CreateWindowEx.

So, a HWND is a HANDLE, but not all HANDLEs are HWND. In fact:

typedef void * PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;


І таких цитат можна тисячу набрати, при бажанні, бо це прописні істини.
До речі, на цих сторінках книги ні слова про хендлом виду magic cookie. Між іншим, такі хендлом не обов'язково повинні бути співставлені з будь-яким об'єктом в пам'яті (можуть і не бути).

Igor_G писал (а): Kросс-платформенность забезпечується тому-що Чарльз Сімонаі був далеко не дурною людиною - (див. Відскановану стор. 4).


Яке відношення має цей Чарльз Сімонаі до крос-платформенности.
Цитата з вашої ж книжки:

У будь-якій книзі, присвяченій програмування під Windows, ви знайдете згадку про те, що один з перших розроб-робником Windows Чарльз Сімонаі, угорець за походженням, почав використовувати в своїх програмах спосіб іменування змінних, кото-рий згодом назвали угорської системою.


Ну, і як це розуміти? Погуглити, що таке крос-платформенность. І що потрібно зробити при написанні програми (особливо такий як), щоб її досягти.

Як визначено Хендел ЕЛЕМЕНТА НА FP?
Те що це можливо - це факт. Це мені відповів NI Support і дав лінк на цю сторінку. Це-ж я читав десь в LAVA (на жаль знайти сьогодні лінк більше не можу).


Повторюю - у об'єктів на FP хендлом немає! Не вірите мені і Vitekkz88 - ось слова Rolf Kalbermatter. з'їв собаку на цих речах (1. 2):

As Chaos said, you simply can not do that. All the front panel objects in LabVIEW are actually LabVIEW objects and absolutely NOT based on Windows standard controls. So there is no Windows HWND associated with them at all.

You can not get a HWND from a LabVIEW control. They are not implemented as Windows child window but are instead entirely handled by LabVIEW internally. The only thing in LabVIEW that has an associated Windows handle are the panels itself.


Якщо і цього мало - візьміть WinSpy або вбудований в LV Window Monitor і дивіться, які хендлом повертаються.
А NI просто вам кинули посилаючись на врапперов (причому, вже застарілі) на деякі функції WinAPI - типу, "самі там возитеся з вашими нам незрозумілими завданнями"

Igor_G писал (а): Чи не вже чи ні у кого немає ідей? Не невже це насправді ні хто не пробував?


А навіщо комусь це взагалі може знадобитися? Між іншим, вам вже була дана карта:

dadreamer писал (а): а все-таки, виконувати роботу з GUI під времякрітічних підпрограма - не є добре.


Однак ви її не побачили. Або не захотіли. Знову намагаєтеся увійти в будинок, не як всі люди, а через горище. Скільки у вас подібних тим вже було. Те компілятор оптимізувати збиралися, то переробити існуючі для роботи з файлами. Часто-фантастика!
У вашому випадку досить було б винести роботу з гуямі в окремий потік і синхронізуватися через черги / повідомнику. Прикладів на форумі повно. Іншим, мабуть більш екзотичним рішенням, було б написати весь GUI в іншому середовищі і оформити у вигляді бібліотеки. Тоді б ви отримали незалежність потоку обробки від UI потоку (DLL реентерентная, природно). Ну, хочете, продовжуйте мікроскопом цвяхи забивати - ваша справа.

Схожі статті