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

 

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

Подскажите.

 

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

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

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

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

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

 

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

#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;
      }
   }
}
 
sanyooooook:

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

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

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




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

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

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

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

 
какой эксель ? версия?
 

вот такой

ошибка такая


даже это есть


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