Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Запрет закрытия консольного окна   Найти похожие ветки 

 
workbench   (2008-09-01 15:21) [0]

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


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

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


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


> Юрий Зотов


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


 
clickmaker ©   (2008-09-01 15:49) [3]

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

FindWindow()


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

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


 
clickmaker ©   (2008-09-01 16:04) [5]

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


 
Vlad Oshin ©   (2008-09-01 16:20) [6]


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

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


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


> Vlad Oshin


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


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


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

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


 
Vlad Oshin ©   (2008-09-01 17:04) [9]


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

wndproc


 
clickmaker ©   (2008-09-01 17:06) [10]

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

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


 
Vlad Oshin ©   (2008-09-01 17:17) [11]

понял

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


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

> workbench   (01.09.08 15:48) [2]

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

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


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

Короче:

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;


 
Vlad Oshin ©   (2008-09-02 09:05) [14]


> 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-02 09:50) [15]

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


 
Vlad Oshin ©   (2008-09-02 09:58) [16]


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

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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
2-1220459844
Mariks
2008-09-03 20:37
2008.10.12
InternetOpenURL


15-1219053835
Vlad Oshin
2008-08-18 14:03
2008.10.12
Microsoft® Virtual PC 2007, что-то не получается сеть настроить


2-1220289348
Age
2008-09-01 21:15
2008.10.12
Горячие клавиши


15-1219085524
self.name
2008-08-18 22:52
2008.10.12
размер Record


15-1219157629
int64
2008-08-19 18:53
2008.10.12
Вакансия. Delphi, MSSQL