Как программно открыть новое окно графика? - страница 4

 
Спасибо за помощь!!!
 
jartmailru:

Отдельное спасибо за GetLastActivePopup(hwnd) :-)
Впрочем, раньше я и GetAncestor(hwnd, GA_ROOT) делал втупую ;-).
.
P.S.: А номер в списке неизвестен... 

Андрей, не знаю, как у тебя в детском саду, а у нас строгие воспиталки. Когда воспиталка увидела, что я рассматриваю код от hrenfx, она дала мне подзатыльник и настучала по попе.

Она сказала, что хорошие мальчики не должны рассматривать плохой код. Ещё она сказала, что функцию GetLastActivePopup() небезопасно использовать. В любой момент может быть активно другое окно и получишь дескриптор именно активного окна, а не того, которое требуется. Для этого надо использовать специальные функции перечислителя окон с колбек-функциями. Такие функции в MQL4 недоступны. Их можно использовать только в нормальных языках, как, например, С++.

К сожалению, hrenfx так и не решил задачу.

Некоторые замечания по коду:

1. По возможности надо использовать функции SendMessage()  вместо PostMessage(). Это повышает надёжность. Особенно в перечислениях и особенно в ОС Windows Vista  и Windows 7.

2. Искать надо не по номеру, а по содержимому строки. По моему, это и так понятно...

Эх, Ильнура нет! Он эту задачу на MQL4 за 3 минуты решил бы...

 

Точно, Вадим! Все правда. Перебором по всем окнам с поиском классов
и текста в заголовке точно надежнее будет.

 

Zhunko:

...Эх, Ильнура нет! Он эту задачу на MQL4 за 3 минуты решил бы...

Так пригласите его, Вы же с ним общаетесь на сайте.
 
Zhunko:

функцию GetLastActivePopup() небезопасно использовать. В любой момент может быть активно другое окно и получишь дескриптор именно активного окна, а не того, которое требуется.

Любой может запустить такой скрипт:

void start()
{
  Sleep(5000);
  OpenOfflineChart(Symbol(), Period());

  return;
}

сразу сделать активным свой браузер и через 5 секунд возвратиться назад, посмотрев, что все сработало. Если одновременно с этим сриптом запустить другой, который будет с частотой > 10Гц выдавать, например, окно Alert. То GetLastActivePopup может вернуть не нужный для нас результат. Чтобы сделать надежным решение на случай подобных извратов можно после вызова GetLastActivePopup проверять окно, что оно именно Offline-List.

К сожалению, hrenfx так и не решил задачу.

Это не задача, а программистское баловство, рабочее в 99% случаев. Обработчик всех возможных ошибок отсутствует, есстественно.

2. Искать надо не по номеру, а по содержимому строки. По моему, это и так понятно...

Для этого надо будет открыть процесс (GetWindowThreadProcessId, OpenProcess), в нем зарезервировать память (VirtualAllocEx), разместить в ней требуемую структуру данных (WriteProcessMemory), туда сохранить необходимую инфу из списка (SendMessage), затем считать данные оттуда (ReadProcessMemory).  И под конец освободить память (VirtualFreeEx) и закрыть процесс (CloseHandle).

Эх, Ильнура нет! Он эту задачу на MQL4 за 3 минуты решил бы...

 Верю. Попросите его, и он "постучит" вам по голове.

 
hrenfx:

Для этого надо будет создать процесс (GetWindowThreadProcessId, OpenProcess), в нем зарезервировать память (VirtualAllocEx), разместить в нем требуемую структуру данных (WriteProcessMemory), туда сохранить необходимую инфу из списка (SendMessage), затем считать данные оттуда (ReadProcessMemory).  И под конец освободить память (VirtualFreeEx) и закрыть процесс (CloseHandle).

Самое забавное, что Ильнур на MQL4 давно решил эту задачу :-)))
 
hrenfx:

Для этого надо будет создать процесс (GetWindowThreadProcessId, OpenProcess), в нем зарезервировать память (VirtualAllocEx), разместить в нем требуемую структуру данных (WriteProcessMemory), туда сохранить необходимую инфу из списка (SendMessage), затем считать данные оттуда (ReadProcessMemory).  И под конец освободить память (VirtualFreeEx) и закрыть процесс (CloseHandle).

Если Dll в том же процессе- ничего этого не нужно.
 
Zhunko:
Самое забавное, что Ильнур на MQL4 решил эту задачу :-)))

За 3 минуты...

 
jartmailru:
Если Dll в том же процессе- ничего этого не нужно.
Вперед!
 
hrenfx:
Вперед!
Заказчик будет- на здоровье. Лично мне оффлайновые графики не нужны.