Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизЗапрет закрытия консольного окна Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.05 c