Как блокировать закрытие терминала ? - страница 5

 

Zhunko:

int Style;
Style = GetWindowLong(hWnd,GWL_STYLE);
Style=Style || WS_CAPTION;
Style=Style || WS_SYSMENU;
SetWindowLong(hWnd, GWL_STYLE, Style);

 

МТ4 определил только функцию с буквой "W" на конце:

Данная конструкция вывела правильный номер дескриптора окна МТ4 и число, обозначающее номер стиля:

1. Что обозначает данное 16-ричное число ? Можете подсказать ?!

2. Чему равна константа: WS_CAPTION ?

3. Чему равна константа: WS_SYSMENU ?

 

1. Это набор флагов. Сразу не скажешь, какие там в наборе.

2.

#define WS_OVERLAPPED       0x00000000L
#define WS_POPUP            0x80000000L
#define WS_CHILD            0x40000000L
#define WS_MINIMIZE         0x20000000L
#define WS_VISIBLE          0x10000000L
#define WS_DISABLED         0x08000000L
#define WS_CLIPSIBLINGS     0x04000000L
#define WS_CLIPCHILDREN     0x02000000L
#define WS_MAXIMIZE         0x01000000L
#define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
#define WS_BORDER           0x00800000L
#define WS_DLGFRAME         0x00400000L
#define WS_VSCROLL          0x00200000L
#define WS_HSCROLL          0x00100000L
#define WS_SYSMENU          0x00080000L
#define WS_THICKFRAME       0x00040000L
#define WS_GROUP            0x00020000L
#define WS_TABSTOP          0x00010000L
 

Тот пример в инете нашёл. Не проверял. Наверно, так надо:

        int Style;
        Style = GetWindowLongA(hWnd,GWL_STYLE);
        Style=Style|WS_CAPTION|WS_SYSMENU;
        SetWindowLongA(hWnd, GWL_STYLE, Style);
Это чтобы другие настройки не изменились.
 

Что-то стало получаться.

Чтобы получить окончательный рабочий код, необходимо знать значение всех флагов с их описанием ...

Может дадите, плз., ссылку, где о них более подробная информация ?!

 
воть
Файлы:
winuser.zip  59 kb
 

Вот первый вариант, который работает и не вешает МТ4:

#property copyright "Copyright © 2012 ЛЕО, forum.mql4.com"
#import "user32.dll" 
      int   GetWindowLongW          (int,int);
      int   SetWindowLongW          (int,int,int);
      int   GetParent               (int hWnd); 
      int   UpdateWindow            (int hWnd);
      int   ShowWindow              (int hWnd, int);
#import

int start() {
      int Style;
      int hg      = WindowHandle (Symbol(),0);
      int phg     = GetParent (hg);
      int dhg     = GetParent (phg);
      int h       = GetParent (dhg);      // дескриптор MT4
      Style = GetWindowLongW (h,-16);     // получаем стиль окна
      switch (Style & 0x00f00000) {
            case 0x00C00000: Style = Style & 0xff8fffff; break; // если МТ4 с кнопкой Х, то изменяем стиль на безкнопочный
            case 0x00800000: Style = 0x15CF8000;                // если стиль без кнопок, то восстанавливаем кнопки
      }
      SetWindowLongW (h, -16, Style);     // выполняем изменения стиля окна
      
      ShowWindow (h,0); ShowWindow (h,1); // обновляем окно
      return(0);
}
 
Svinotavr:

Есть ещё идея (частично в эту тему). Восстанавливать работу терминала, если его работа была завершена по каким-либо причинам. Самый простейший пример - в прикреплённом файле. Каждые 10 секунд программа ищет в списке запущенных процессов процесс терминала, если не находит, то запускает его.
Попытка "убить" терминал при работе такой программы приведёт к его запуску в течение 10-15 секунд.


Спасибо. Полезная штучка !

Данная программа пригодится, но в другой теме !

 
LEOK:

Я хочу, чтобы терминал, при нажатии кнопки "Х" в правом верхнем углу не закрывался сразу, а предварительно спросил о закрытии, либо вообще не реагировал на это нажатие. Как перехватить такое нажатие ?

[img]http://doodoo.ru/smiles/huge/after_boo.png[/img]
 
[img]http://doodoo.ru/smiles/huge/after_boo.png[/img]
Причина обращения: