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

 
hrenfx:

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

 

А у меня так:

OpenOfflineChart("MY_TOOL15");
По моему, так проще.
 
hrenfx:

Вроде, несложно:


отлично! чет я начал это делать, споткнулся, что кнопка вниз не получается,  в окне есть всплывающие подсказки, как нибудь из них можно выудить инфу?
 
jartmailru:

P.S.: А номер в списке неизвестен... 

Если знаете название нужного фин. инструмента, то найти номер тоже не проблема. Можно двумя способами:

  1. Прошуршить Offline-список поэлементно.
  2. Отсортировать по алфавиту список hst-файлов в папке history. Элемент с нашим фин. инструментом и будет искомым номером.
 
Zhunko:

А у меня так

Выкладывайте, иначе получается,  как в детском саду.
 
hrenfx:
Выкладывайте, иначе получается,  как в детском саду.
А мне в детском саду не плохо...  Кормят, комп есть, инет есть, тётки взрослые ходят, подсказывают на какие кнопки жать...
 

Открытие Offline-графика заданного таймфрэйма по имени фин. инструмента:

#import "user32.dll"
  int PostMessageA( int hWnd, int Msg, int wParam, int lParam );
  int GetAncestor( int hWnd, int gaFlags );
  int GetLastActivePopup( int hWnd );
  int GetDlgItem( int hDlg, int nIDDlgItem );
#import

#import "kernel32.dll"
  int  FindFirstFileA( string Path, int& Answer[] );
  bool FindNextFileA( int handle, int& Answer[] );
  bool FindClose( int handle );
#import

#define WM_COMMAND 0x0111
#define WM_KEYDOWN 0x0100

#define VK_DOWN 0x28

#define BM_CLICK 0x00F5

#define GA_ROOT 2

#define PAUSE 100

string BuffToString( int& Buffer[] )
{
  string Str = "";
  int Pos = 11;

  while (Pos < 75)
  {
    while (Buffer[Pos] != 0)
    {
      Str = Str + CharToStr(Buffer[Pos] & 0xFF);

      Buffer[Pos] /= 0x100;
    }

    Pos++;
  }

  return(Str);
}

int GetChartPos( string FileName )
{
  int Buffer[79];
  int Pos = 0;
  int handle = FindFirstFileA(TerminalPath() + "\history\\"  + AccountServer() + "\\*.hst", Buffer);

  if (BuffToString(Buffer) != FileName)
  {
    Pos++;

    while (FindNextFileA(handle, Buffer))
    {
      if (BuffToString(Buffer) == FileName)
        break;

      Pos++;
    }
  }

  if (handle > 0)
    FindClose(handle);

  return(Pos);
}

// Открывает список Offline-графиков. Возвращает хэндл окна списка.
int OpenOfflineList()
{
  int hwnd = WindowHandle(Symbol(), Period());

  hwnd = GetAncestor(hwnd, GA_ROOT);

  PostMessageA(hwnd, WM_COMMAND, 33053, 0);
  Sleep(PAUSE);

  hwnd = GetLastActivePopup(hwnd);

  return(hwnd);
}

// Открывает Offline-график по номеру в списке
void OpenOfflineChartbyNum( int ChartPos )
{
  int hwnd1 = OpenOfflineList();
  int hwnd2 = GetDlgItem(hwnd1, 1);

  hwnd1 = GetDlgItem(hwnd1, 0x487);

  while (ChartPos >= 0)
  {
    PostMessageA(hwnd1, WM_KEYDOWN, VK_DOWN, 0);

    ChartPos--;
  }

  Sleep(PAUSE);

  PostMessageA(hwnd2, BM_CLICK, 0, 0);

  return;
}

// Открывает Offline-график по имени с заданным таймфрэймом
void OpenOfflineChart( string Symb, int period )
{
  OpenOfflineChartbyNum(GetChartPos(Symb + period + ".hst"));

  return;
}

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

  return;
} 
 
hrenfx:

Открытие Offline-графика заданного таймфрэйма по имени фин. инструмента:


Человек! респект и уважуха! :)

код норм, немного причесать бы, но у меня чет бросил на  EURUSD H1, а открылся оффлайн EURUSD Monthly

 

IgorM:

код норм, немного причесать бы, но у меня чет бросил на  EURUSD H1, а открылся оффлайн EURUSD Monthly

Есть такой баг, но специально его не правил. Кому надо, подправят (просто). Причину опишу:

FindNextFile выдает имена файлов в отсортированном по алфавиту порядке, только порядок несколько отличный от привычного:

Привычная сортировка
Сортировка FindNextFile
AUDUSD1.hst
AUDUSD1.hst
AUDUSD5.hst
AUDUSD43200.hst
AUDUSD60.hst
AUDUSD5.hst
AUDUSD43200.hst
AUDUSD60.hst

P.S. Сортировка по имени присутствует на NTFS. На FAT32, вроде, отсутствует.

 
hrenfx:

Есть такой баг, но специально его не правил. Кому надо, подправят (просто). Причину опишу:

все равно спс, сэкономил время, мне правда и так пойдет - мои оффлайновые графики имеют имена уникальные, т.е. отличные от стандартных 

Причина обращения: