Скачать MetaTrader 5

Закрыть сообщение об ошибке в экселе из скрипта МТ4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexandr Bryzgalov
40819
Alexandr Bryzgalov  

Знаю что реально, не знаю как.

Подскажите.

Alexandr Bryzgalov
40819
Alexandr Bryzgalov  

на сколько понял нужно отловить хендл окна, а потом отправить ему сообщение(SendMessageA). Правильно?

ЗЫ: будет много глупых вопросов, я с этим не барабался ни разу

Рустам
3612
Рустам  
SPY в руки, генерим сообщение об ошибке, отлавливаем его SPY смотрим на класс (скорее всего всплывающее окно), читаем хендл, идентифицируем с экселем, и кроем. Все то есть на форуме, только тебе нужно не МТшное окно а экселевское.
Alexandr Bryzgalov
40819
Alexandr Bryzgalov  
FAQ:
SPY в руки, генерим сообщение об ошибке, отлавливаем его SPY смотрим на класс (скорее всего всплывающее окно), читаем хендл, идентифицируем с экселем, и кроем. Все то есть на форуме, только тебе нужно не МТшное окно а экселевское.

Да я ищу читаю, но блин учится сложно ). Для того кто знает все очень просто. Вот SPY например, что за хрень только сегодня наткнулся(говорю же не сталкивался с этим)

ЗЫ: вроде даже я его уже скачал

Alexandr Bryzgalov
40819
Alexandr Bryzgalov  

вот тут нашел подобие

#import "user32.dll"
  int GetDesktopWindow();
  int GetWindow(int hWnd, int uCmd);
  int GetWindowTextA(int hWnd, string lpString, int nMaxCount);
  int GetWindowTextLengthA(int hWnd);
  int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
#import

#define GW_HWNDNEXT  2
#define GW_CHILD     5

#define WM_CLOSE     0x0010

void start()
{
   StatementClose("Microsoft Office Excel");
}

//функция закрывает окно браузера с отчетом о торговой истории счета
void StatementClose(string WName)
{
   int hWnd, nMaxCount;
   string sWindowName = "                                                                                ";
   
   hWnd = GetWindow(GetDesktopWindow(), GW_CHILD);
   
   while(hWnd!=0)
   {
      hWnd = GetWindow(hWnd, GW_HWNDNEXT);
      
      nMaxCount = GetWindowTextLengthA(hWnd);
      GetWindowTextA(hWnd, sWindowName, nMaxCount+1);
      
      if(StringFind(sWindowName, WName, 0)>=0)
      {
         Print("Закрываем окно ошибки");
         PostMessageA(hWnd, WM_CLOSE, 0, 0);
         break;
      }
   }
}
Андрей
1890
Андрей  
sanyooooook:

на сколько понял нужно отловить хендл окна, а потом отправить ему сообщение(SendMessageA). Правильно?

Всё правильно сделал.
Alexandr Bryzgalov
40819
Alexandr Bryzgalov  
sanyooooook:

вот тут нашел подобие




Не канает, закрывает только если эксель с верху
Alexandr Bryzgalov
40819
Alexandr Bryzgalov  

это для главного окна

     hWnd = FindWindowA("XLMAIN", WName); //ищем окно

а для окна ошибки как будет?

Рустам
3612
Рустам  
какой эксель ? версия?
Alexandr Bryzgalov
40819
Alexandr Bryzgalov  

вот такой

ошибка такая


даже это есть


123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий