Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрет закрытия консольного окна [D6, 2000]


workbench ©   (2008-09-01 15:21:00) 

Здравствуйте. Да вот собственно и весь вопрос, как запретить закрытие консольного окна "щелчком" мыши на "крестике" (Ctrl + C нашёл как сделать, а с мышью нихт...)


workbench   (2008-09-02 11:24:00) [1]

Здорово))) всё именно так как хотелось, спасибо за помощь!


Юрий Зотов   (2008-09-02 11:15:00) [2]

> да, конечно есть.. :)
Конечно. У меня нет точки с запятой.
:o)

> Наверное, не совпала комбинация
В GetSystemMenu должно стоять False, проверь.


Vlad Oshin   (2008-09-02 09:58:00) [3]


> Юрий Зотов ©   (02.09.08 09:50) [15]

да, конечно есть.. :)
я и enable, и delete, и еще чего-то и константы разные. Потом выяснилось, что окно не находилось :).
потом нашлось и по-новой начал, но уже злее был..
Наверное, не совпала комбинация DeleteMenu, SC_CLOSE, MF_BYCOMMAND
:)


Юрий Зотов   (2008-09-02 09:50:00) [4]

Влад, между нашими строчками различие есть. В нем все и дело.


Vlad Oshin   (2008-09-02 09:05:00) [5]


> procedure TForm1.Button1Click(Sender: TObject);
> var
>  Wnd: HWND;
>  Menu: HMENU;
> begin
>  Wnd := FindWindow('ConsoleWindowClass', 'Командная строка');
>
>  Menu := GetSystemMenu(Wnd, False);
>  DeleteMenu(Menu, SC_CLOSE, MF_BYCOMMAND)
> end;

странно.. вчера писал тоже самое
только получил
...
DeleteMenu(Menu, SC_CLOSE, MF_BYCOMMAND);
ShowMessage(SysErrorMessage(GetLastError));
-- Операция запрещена
Может вчера был понедельник, а по понедельникам нельзя? :)


Юрий Зотов   (2008-09-01 23:38:00) [6]

Короче:

procedure TForm1.Button1Click(Sender: TObject);
var
 Wnd: HWND;
 Menu: HMENU;
begin
 Wnd := FindWindow('ConsoleWindowClass', 'Командная строка');
 Menu := GetSystemMenu(Wnd, False);
 DeleteMenu(Menu, SC_CLOSE, MF_BYCOMMAND)
end;


Юрий Зотов   (2008-09-01 22:14:00) [7]

> workbench   (01.09.08 15:48) [2]

GetStdHandle дает хэндлы стандартных потоков ввода-вывода, а тут нужен хэндл ОКНА. FindWindow.

Вообще, окно консоли от других окон не отличается ничем. Такое же окно, только выполняется в нем неоконная программа, а окно отображает тот самый ввод-вывод.


Vlad Oshin   (2008-09-01 17:17:00) [8]

понял

А чья консоль то? своя/чужая?


clickmaker   (2008-09-01 17:06:00) [9]

> [9] Vlad Oshin ©   (01.09.08 17:04)

у cmd.exe нету, но у окна-то есть


Vlad Oshin   (2008-09-01 17:04:00) [10]


> какой такой "функции окна"?

wndproc


Правильный$Вася   (2008-09-01 16:52:00) [11]


> имхо, там нет функции окна

какой такой "функции окна"?


workbench   (2008-09-01 16:31:00) [12]


> Vlad Oshin


хм... тогда не ясно в каком "контексте" обрабатываются сообщения, впрочем всё равно не ясны "принципы" управления конс-м окном, не SetWindowLong же тут исп-ть...


Vlad Oshin   (2008-09-01 16:20:00) [13]


>  в чём тогда отличие

имхо, там нет функции окна


clickmaker   (2008-09-01 16:04:00) [14]

в винде всё суть окна )


workbench   (2008-09-01 15:51:00) [15]

э-э-э... то есть с т. зрения Win консольное окошко - это такое окно с очередью как и остальные, а в чём тогда отличие?


clickmaker   (2008-09-01 15:49:00) [16]

> Хэндл, это, очевидно, через GetStdHandle?

FindWindow()


workbench   (2008-09-01 15:48:00) [17]


> Юрий Зотов


Хэндл, это, очевидно, через GetStdHandle?
А вот как запретить непонятно?


Юрий Зотов   (2008-09-01 15:31:00) [18]

Можно попробовать так:
1. Получить хэндл консольного окна.
2. Запретить пункт его системного меню.


Наверх

Титульная страница Поиск, карта сайта Написать письмо