почему же не обойтись.
если испльзовать хендлы, то докопаться можно...
Без DLL не обойтись. Что такое внешние и не внешние DLL - не понятно, они все внешние по отношению к MQL.
очень даже можно обойтись - в MQL достаточно средств для этого ;)
слово внешние - просто подчеркивает что мне нужно "внутреннее" решение только на MQL
вот код который получает к-во строк в истории счета
#include <WinUser32.mqh> #import "user32.dll" int GetParent( int hWnd ); int GetAncestor(int hWnd, int gaFlags); int GetDlgItem(int hDlg, int nIDDlgItem); #import #define LVM_GETITEMCOUNT 0x1004 void start() { int hwnd = GetAncestor(WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала int Count = 0; if (hwnd != 0) // нашли главное окно { hwnd = GetDlgItem(hwnd, 0xE81E); // Нашли историю счета hwnd = GetDlgItem(hwnd, 0x51); hwnd = GetDlgItem(hwnd, 0x81B8); Count = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); // получили количество элементов списка } Print(Count); }осталось дописать получение выбранной строки и нужной ячейки в ней, но в этом я уже не силен :((
вот на просторах тырнета удалось накопиастить такие тексты - возможно они помогут
public struct LV_ITEM
{
public UInt32 mask;
public Int32 iItem;
public Int32 iSubItem;
public UInt32 state;
public UInt32 stateMask;
public String pszText;
public Int32 cchTextMax;
public Int32 iImage;
public IntPtr lParam;
}
const int BUFFER_SIZE = 512;
LV.iItem = 3;
LV.mask = Win32API.LVIF_IMAGE;
LV.cchTextMax = 255;
LV.iSubItem = 0;
LV.pszText = new String('\0', 255);
Win32API.SendMessage(hWnd, Win32API.LVM_GETITEMTEXT, 3, ref LV);
string text = LV.pszText.ToString();
const int LVM_FIRST = 0x1000;
const int LVM_GETITEMCOUNT = LVM_FIRST + 4;
const int LVM_GETITEM = LVM_FIRST + 5;
const int LVIF_TEXT = 0x0001;
LVM_GETITEMTEXT = (LVM_FIRST + 45);
Получить текст из итема ListView можно так:
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = 0 /* first column */;
LPTSTR pszRet;
int nLen = 64;
int nRes;
do
{
nLen *= 2;
pszRet = (TCHAR *)realloc(pszRet, sizeof(TCHAR) * nLen);
lvi.cchTextMax = nLen;
lvi.pszText = pszRet;
nRes = (int)SendMessage(hListView, LVM_GETITEMTEXT, (WPARAM)8 /* item index */, (LPARAM)&lvi);
} while (nRes >= nLen-1);
...
ForexTools, а тебе известен аналог функции WindowHandle() в пятере? Я что-то его не нашел. И вообще ничего с окнами нет вроде как.
Ну вот как мне найти хэндл окна текущего чарта в пятере - пусть и с API?
ForexTools, а тебе известен аналог функции WindowHandle() в пятере? Я что-то его не нашел. И вообще ничего с окнами нет вроде как.
Ну вот как мне найти хэндл окна текущего чарта в пятере - пусть и с API?
чтоб получить хендл надо обратиться к
ChartGetInteger(ChartID(), CHART_WINDOW_HANDLE)
и все что касается окон лежит в https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
намного больший ассортимент чем в МТ4
Ух спасибо, народ. А то я уже растерялся...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Задачка такая: мне в скрипте\индикаторе\советнике нужно узнать
1) номер открытого ордера, который подсвечен\выбран в окне Торговля (колонка Ордер)
2) номер закрытого ордера на закладочке История счета
3) номер ордера на закладочке Результаты в режиме визуального тестирования
В идеале - хотелось бы (на всякий случай) иметь возможность получить значение из любой ячейки этих "таблиц" задавая номер строки и номер или имя колонки ну и конечно номер выбранной строки или 0 если строка не выбрана.
Фактически нужны функции:
int GetSelectedOrderNumber(int Source)
а в общем случаеstring GetCell(int Source, int Row, int Column)
int GetSelectedRowNumber(int Source)
int GetRowsCount(int Source)
где Source - задает окно откуда тягать данные, например 0-Открытые, 1-закрытые, 2-визуализатор
нужен код на MQ4 (без внешних dll).
Кто знает как сделать такое и может написать такой набор функций - отзовитесь пожалуйста.