Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Публикуй статьи и увеличивай свой рейтинг!
Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.20 10:21 

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

Подскажите.

Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.20 10:43  

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

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

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

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

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

Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.20 12:42  

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

#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
Андрей 2012.04.20 20:18  
sanyooooook:

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

Всё правильно сделал.
Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.23 08:54  
sanyooooook:

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




Не канает, закрывает только если эксель с верху
Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.23 08:55  

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

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

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

Рустам
3597
Рустам 2012.04.23 09:00  
какой эксель ? версия?
Alexandr Bryzgalov
24773
Alexandr Bryzgalov 2012.04.23 09:04  

вот такой

ошибка такая


даже это есть


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