101 lines
3.8 KiB
MQL5
101 lines
3.8 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| LibWindowTree.mq5 |
|
|
//| Copyright 2021-2022, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
|
|
#include <WinAPI/WinUser.mqh>
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Obtain window class name and title by handle |
|
|
//+------------------------------------------------------------------+
|
|
void GetWindowData(HANDLE w, string &clazz, string &title)
|
|
{
|
|
static ushort receiver[MAX_PATH];
|
|
if(GetWindowTextW(w, receiver, MAX_PATH))
|
|
{
|
|
title = ShortArrayToString(receiver);
|
|
}
|
|
if(GetClassNameW(w, receiver, MAX_PATH))
|
|
{
|
|
clazz = ShortArrayToString(receiver);
|
|
}
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Walk up through parent windows |
|
|
//+------------------------------------------------------------------+
|
|
HANDLE TraverseUp(HANDLE w)
|
|
{
|
|
HANDLE p = 0;
|
|
while(w != 0)
|
|
{
|
|
p = w;
|
|
string clazz, title;
|
|
GetWindowData(w, clazz, title);
|
|
Print("'", clazz, "' '", title, "'");
|
|
w = GetParent(w);
|
|
}
|
|
return p;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Walk down through child windows |
|
|
//+------------------------------------------------------------------+
|
|
HANDLE TraverseDown(const HANDLE w, const int level = 0)
|
|
{
|
|
HANDLE child = FindWindowExW(w, NULL, NULL, NULL); // get 1-st child window (if any)
|
|
while(child) // keep going while children exist
|
|
{
|
|
string clazz, title;
|
|
GetWindowData(child, clazz, title);
|
|
Print(StringFormat("%*s", level * 2, ""), "'", clazz, "' '", title, "'");
|
|
TraverseDown(child, level + 1);
|
|
child = FindWindowExW(w, child, NULL, NULL); // get next child window
|
|
}
|
|
return child;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
// to get the main window could call
|
|
// FindWindowW("MetaQuotes::MetaTrader::5.00", NULL);
|
|
// or traverse up:
|
|
HANDLE h = TraverseUp(ChartGetInteger(0, CHART_WINDOW_HANDLE));
|
|
Print("Main window handle: ", h);
|
|
TraverseDown(h, 1);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
/*
|
|
|
|
'AfxFrameOrView140su' ''
|
|
'Afx:000000013F110000:b:0000000000010003:0000000000000006:00000000000306BA' 'EURUSD,H1'
|
|
'MDIClient' ''
|
|
'MetaQuotes::MetaTrader::5.00' '12345678 - MetaQuotes-Demo: Demo Account - Hedge - MetaQuotes Software Corp. - [EURUSD,H1]'
|
|
Main window handle: 263576
|
|
'msctls_statusbar32' 'For Help, press F1'
|
|
'AfxControlBar140su' 'Standard'
|
|
'ToolbarWindow32' 'Timeframes'
|
|
'ToolbarWindow32' 'Line Studies'
|
|
'ToolbarWindow32' 'Standard'
|
|
'AfxControlBar140su' 'Toolbox'
|
|
'Afx:000000013F110000:b:0000000000010003:0000000000000000:0000000000000000' 'Toolbox'
|
|
'AfxWnd140su' ''
|
|
'ToolbarWindow32' ''
|
|
...
|
|
'MDIClient' ''
|
|
'Afx:000000013F110000:b:0000000000010003:0000000000000006:00000000000306BA' 'EURUSD,H1'
|
|
'AfxFrameOrView140su' ''
|
|
'Edit' '0.00'
|
|
'Afx:000000013F110000:b:0000000000010003:0000000000000006:00000000000306BA' 'XAUUSD,Daily'
|
|
'AfxFrameOrView140su' ''
|
|
'Edit' '0.00'
|
|
'Afx:000000013F110000:b:0000000000010003:0000000000000006:00000000000306BA' 'EURUSD,M15'
|
|
'AfxFrameOrView140su' ''
|
|
'Edit' '0.00'
|
|
|
|
*/
|
|
//+------------------------------------------------------------------+
|