Как получить хэндл комбобокса в окне ордера?

 

Пользуюсь нативной winapi.mqh.

Хэндл окна ордера нахожу, но комбобокс (Type) никак не находится...

Пытаюсь так:

m_order_mode_combo_handle=GetDlgItem(m_handle,00002862);

Возвращает 0.

Вот control id:


 
это похоже 16-чное значение, но без разницы, конвертирую 16 в 10 (10338) и то же самое.
 
leonerd:

Пользуюсь нативной winapi.mqh.

Хэндл окна ордера нахожу, но комбобокс (Type) никак не находится...

Пытаюсь так:

Возвращает 0.

Вот control id:


GetDlgCtrlID

 
Aliaksandr Hryshyn #:

GetDlgCtrlID

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdlgctrlid

На вход надо подавать хэндл контрола. А что мне подавать, если у меня как раз задача узнать этот хэндл?

GetDlgCtrlID function (winuser.h) - Win32 apps
GetDlgCtrlID function (winuser.h) - Win32 apps
  • 2021.10.13
  • jwmsft
  • docs.microsoft.com
Retrieves the identifier of the specified control.
 
GetDlgCtrlID(0xD71A7E)

Получаем 2862
 
Хэндл можно найти путём перемещения по родительским/дочерним окнам
 
Aliaksandr Hryshyn #:
Хэндл можно найти путём перемещения по родительским/дочерним окнам

это чем перемещаться?

 
Всё же странно, получил контрол через хэндл 
GetDlgCtrlID()

А обратно из контрола хэндл 

GetDlgItem()

всегда 0.

 

Разобрался. Оказывается, я неправильно хэндл окна ордера находил. Находится таким образом:

res=GetWindow(m_program_window_handle,6);
 

Оказывается, нетривиальная задача хэндл окна ордера получить.

res=FindWindowW("#32770","Order");

Вот так я его успешно нахожу в дебаге. А как вживую запускаю, то 0. Хотя все свойства окна такие же хоть в дебаге, хоть вживую.

И так тоже нестабильно:

res=GetWindow(m_program_window_handle,6);
 
leonerd #:

Оказывается, нетривиальная задача хэндл окна ордера получить.

Вот так я его успешно нахожу в дебаге. А как вживую запускаю, то 0. Хотя все свойства окна такие же хоть в дебаге, хоть вживую.

И так тоже нестабильно:

FindWindowW

Эта функция не ищет в дочерних окнах, только верхний уровень

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexw
FindWindowExW function (winuser.h) - Win32 apps
FindWindowExW function (winuser.h) - Win32 apps
  • 2021.10.13
  • jwmsft
  • docs.microsoft.com
Retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the specified child window. This function does not perform a case-sensitive search.
Причина обращения: