Связка Mathcad vs MT5 ? удаленно вызвать расчет, помогите с командами

 
#import "user32.dll"
int SendMessageA( int hWnd, int Msg, int wParam, int lParam);
int FindWindowA( string lpClassName , string lpWindowName);
#import

#define WM_COMMAND 0x0111

// Инициализирует расчет открытого Mathcad-файла с именем MathcadFileName
bool RefreshMathcad( string MathcadFileName )
{
  static string Str;
  int hwnd = 0;

  MathcadFileName = "Mathcad - [" + MathcadFileName + "]";

  hwnd = FindWindowA(Str, MathcadFileName);
    
  if (hwnd <= 0)
    return(false);
  
  SendMessageA(hwnd, WM_COMMAND, 579, 0);
      
  return(true);
}
Вопрос в следующем, эти команды не иннициализируют расчет открытого Mathcad-файла, какие будут работать? 
 
Когда писал этот вариант, вроде, под старую версию Mathcad был заточен.
Есть ли у кого такая прога - "соединитель" ? - MQL4 форум
  • www.mql5.com
Есть ли у кого такая прога - "соединитель" ? - MQL4 форум
 

hrenfx:
Когда писал этот вариант, вроде, под старую версию Mathcad был заточен.

 

Да посмотрел, на MT5  неработает, то что юникод в пятерке работает тоже понятно, но вопрос остается открытым . Почемуто хендл окна только в первый раз находит потом 0

 
dentraf:
Этой строке ничего не присваивается.
static string Str;

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

static string Str = "";

В Mathcad'e и WinAPI я не ферштейн, но в mql коде косячок разглядел.  Поправьте, возможно поможет.

// с Юникодом вы, похоже, уже разобрались.

 
MetaDriver:
Этой строке ничего не присваивается.

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

В Mathcad'e и WinAPI я не ферштейн, но в mql коде косячок разглядел.  Поправьте, возможно поможет.

// с Юникодом вы, похоже, уже разобрались.

 

 

Все разобрался, спасибо, теперь все работает 

 

dentraf:

.......

Все разобрался, спасибо, теперь все работает 

А как сделали, если не секрет?

Выложите, пожалуйста, рабочую версию функции!

 
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#import "user32.dll"
int PostMessageW(int hWnd,int Msg,int wParam,int lParam);
int FindWindowW(string lpClassName,string lpWindowName);
#import

#define WM_COMMAND 0x0111


int handle;
// Инициализирует расчет открытого Mathcad-файла
bool RefreshMathcad()
  {
   static string Str;
   int hwnd=0;

   
   hwnd=FindWindowW(Str,"Mathcad - [Chart.mcd]");
   
   if(hwnd<=0)
     {return(false);}
         
   PostMessageW(hwnd, WM_COMMAND, 579, 0);

   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   handle=FileOpen("Analyse.csv",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_ANSI|FILE_COMMON);
   EventSetTimer(1);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SaveData()
  {
   FileWrite(handle,IntegerToString(GetTickCount()));
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   SaveData();
   RefreshMathcad();
   return;
  }
//+------------------------------------------------------------------+
 
dentraf:
Спасибо!  Не то что бы мне актуально, просто логику понять хочу, для других программ может пригодиться.  А может и для Маткада.
 

В FindWindowW в первом параметре кроме неинициализированной строки можно подставлять значение NULL:

//+------------------------------------------------------------------+
//| string Str=""; - не работает,                                    |
//| string Str; - работает                                           |
//| FindWindowW(NULL,WindowName));  - работает                       |
//+------------------------------------------------------------------+
   string Str;
   string WindowName="Здесь название окна";
   Print("FindWindowW=",FindWindowW(null_string,WindowName));
Причина обращения: