Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
#1

Блокировка кнопки выхода - C++

25.08.2012, 18:08. Просмотров 842. Ответов 12
Метки нет (Все метки)

А можно как нибудь заблокировать кнопку выхода, чтобы из программы нельзя было выйти таким способом???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
395 / 388 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
25.08.2012, 18:13     Блокировка кнопки выхода #2
Можно. Смотрите в сторону WinApi. Отлавливаете событие выхода и говорите что выходить не нужно.
MegaMozg
44 / 44 / 1
Регистрация: 19.12.2008
Сообщений: 110
25.08.2012, 18:16     Блокировка кнопки выхода #3
уточните, на чем GUI реализуете.
если WinAPI, то можно так:

C++
1
2
int hMenu=GetSystemMenu(hWnd,false);
if(hMenu) DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
25.08.2012, 18:19  [ТС]     Блокировка кнопки выхода #4
Цитата Сообщение от MegaMozg Посмотреть сообщение
уточните, на чем GUI реализуете.
Обычное консольное приложение
MegaMozg
44 / 44 / 1
Регистрация: 19.12.2008
Сообщений: 110
25.08.2012, 18:27     Блокировка кнопки выхода #5
опять же, если WinAPI, то находим хэндл нашего консольного окна:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Размер буфера для заголовка консольного окна.
       HWND hwndFound;         // Это то, что будет возвращено.
       char pszNewWindowTitle[MY_BUFSIZE]; // Уникальный заголовок окна.
       char pszOldWindowTitle[MY_BUFSIZE]; // Изначальный заголовок окна.
 
       // Выбираем текущий заголовок окна.
 
       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
 
       // Формируем "уникальный" NewWindowTitle.
 
       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());
 
       // Изменяем текущий заголовок окна.
 
       SetConsoleTitle(pszNewWindowTitle);
 
       // даём время заголовку, чтобы измениться.
 
       Sleep(40);
 
       // Ищем NewWindowTitle.
 
       hwndFound=FindWindow(NULL, pszNewWindowTitle);
 
       // Восстанавливаем изначальный заголовок окна.
 
       SetConsoleTitle(pszOldWindowTitle);
 
       return(hwndFound);
   }
и дальше делаем, как я писал выше
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
25.08.2012, 18:42  [ТС]     Блокировка кнопки выхода #6
и дальше делаем, как я писал выше

А для Console Aplication этот способ подойдет???

Добавлено через 9 минут
Мне нужно именно для консольного приложения
MegaMozg
44 / 44 / 1
Регистрация: 19.12.2008
Сообщений: 110
25.08.2012, 18:51     Блокировка кнопки выхода #7
работает

Добавлено через 55 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>
 
HWND GetConsoleHwnd(void)
   {
HWND hwndFound;         // Это то, что будет возвращено.
       TCHAR pszNewWindowTitle[512]; // Уникальный заголовок окна.
       TCHAR pszOldWindowTitle[512]; // Изначальный заголовок окна.
 
       // Выбираем текущий заголовок окна.
 
       GetConsoleTitle(pszOldWindowTitle, 1024);
 
       // Формируем "уникальный" NewWindowTitle.
 
       wsprintf(pszNewWindowTitle,L"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());
 
       // Изменяем текущий заголовок окна.
 
       SetConsoleTitle(pszNewWindowTitle);
 
       // даём время заголовку, чтобы измениться.
 
       Sleep(40);
 
       // Ищем NewWindowTitle.
 
       hwndFound=FindWindow(NULL, pszNewWindowTitle);
 
       // Восстанавливаем изначальный заголовок окна.
 
       SetConsoleTitle(pszOldWindowTitle);
 
       return(hwndFound);
   } 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    HMENU hMenu=GetSystemMenu(GetConsoleHwnd(),false);
if(hMenu)
    DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
    return 0;
}
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,031
25.08.2012, 19:19     Блокировка кнопки выхода #8
Цитата Сообщение от Egor138 Посмотреть сообщение
А для Console Aplication этот способ подойдет???
А ты подумай чем ConsoleAplication отличается от Win32Aplication ?
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
25.08.2012, 20:26  [ТС]     Блокировка кнопки выхода #9
Цитата Сообщение от Игорь с++ Посмотреть сообщение
А ты подумай чем ConsoleAplication отличается от Win32Aplication ?
Ну просто есть же еще win32 project

Добавлено через 2 минуты
Цитата Сообщение от MegaMozg Посмотреть сообщение
работает

Добавлено через 55 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>
 
HWND GetConsoleHwnd(void)
   {
HWND hwndFound;         // Это то, что будет возвращено.
       TCHAR pszNewWindowTitle[512]; // Уникальный заголовок окна.
       TCHAR pszOldWindowTitle[512]; // Изначальный заголовок окна.
 
       // Выбираем текущий заголовок окна.
 
       GetConsoleTitle(pszOldWindowTitle, 1024);
 
       // Формируем "уникальный" NewWindowTitle.
 
       wsprintf(pszNewWindowTitle,L"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());
 
       // Изменяем текущий заголовок окна.
 
       SetConsoleTitle(pszNewWindowTitle);
 
       // даём время заголовку, чтобы измениться.
 
       Sleep(40);
 
       // Ищем NewWindowTitle.
 
       hwndFound=FindWindow(NULL, pszNewWindowTitle);
 
       // Восстанавливаем изначальный заголовок окна.
 
       SetConsoleTitle(pszOldWindowTitle);
 
       return(hwndFound);
   } 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    HMENU hMenu=GetSystemMenu(GetConsoleHwnd(),false);
if(hMenu)
    DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
    return 0;
}

Большое спасибо. Я подобным способом могу убрать рядом стоящие кнопки - развернуть свернуть ???
MegaMozg
44 / 44 / 1
Регистрация: 19.12.2008
Сообщений: 110
25.08.2012, 21:18     Блокировка кнопки выхода #10
Цитата Сообщение от Egor138 Посмотреть сообщение
Большое спасибо. Я подобным способом могу убрать рядом стоящие кнопки - развернуть свернуть ???
да, можете
C++
1
2
3
4
5
6
if(hMenu)
{
    DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
    DeleteMenu(hMenu,SC_MAXIMIZE,MF_BYCOMMAND);
    DeleteMenu(hMenu,SC_MINIMIZE,MF_BYCOMMAND);
}
на вид кнопки будут активны, но действия выполнять не будут
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
25.08.2012, 21:34  [ТС]     Блокировка кнопки выхода #11
Цитата Сообщение от MegaMozg Посмотреть сообщение
да, можете
C++
1
2
3
4
5
6
if(hMenu)
{
    DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
    DeleteMenu(hMenu,SC_MAXIMIZE,MF_BYCOMMAND);
    DeleteMenu(hMenu,SC_MINIMIZE,MF_BYCOMMAND);
}
на вид кнопки будут активны, но действия выполнять не будут
Огромное вам спасибо)
Рыжий Лис
Просто Лис
217 / 172 / 46
Регистрация: 17.05.2012
Сообщений: 631
Записей в блоге: 4
27.08.2012, 15:30     Блокировка кнопки выхода #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <windows.h>
 
HWND GetConsoleHwnd(void)
{ HWND hwndFound;         // Это то, что будет возвращено.
  TCHAR pszNewWindowTitle[512]; // Уникальный заголовок окна.
  TCHAR pszOldWindowTitle[512]; // Изначальный заголовок окна.
       // Выбираем текущий заголовок окна.
  GetConsoleTitle(pszOldWindowTitle, 1024);
       // Формируем "уникальный" NewWindowTitle.
 
       wsprintf(pszNewWindowTitle,L"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());
 
       // Изменяем текущий заголовок окна.
       SetConsoleTitle(pszNewWindowTitle);
       // даём время заголовку, чтобы измениться.
       Sleep(40);
       // Ищем NewWindowTitle.
       hwndFound=FindWindow(NULL, pszNewWindowTitle);
       // Восстанавливаем изначальный заголовок окна.
       SetConsoleTitle(pszOldWindowTitle);
       return(hwndFound);
}
 
int main()
{ HMENU hMenu=GetSystemMenu(GetConsoleHwnd(),false);
  if(hMenu)
    DeleteMenu(hMenu,SC_CLOSE,MF_BYCOMMAND);
  return 0;
}
Не работает. Пишет ошибку
Код
052.cpp:13: error: cannot convert 'const wchar_t*' to 'const CHAR*' for argument '2' to 'int wsprintfA(CHAR*, const CHAR*, ...)'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2012, 15:41     Блокировка кнопки выхода
Еще ссылки по теме:

C++ Ошибка при блокировки выхода
Простенький алгоритм выхода из лабиринта C++
Нахождение выхода из лабиринта C++
C++ Ошибка после выхода из программы
Ошибка после выхода из программы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6478 / 4944 / 455
Регистрация: 14.02.2011
Сообщений: 16,386
27.08.2012, 15:41     Блокировка кнопки выхода #13
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
error: cannot convert 'const wchar_t*' to 'const CHAR*' for argument '2' to 'int wsprintfA(CHAR*, const CHAR*, ...)'
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
L"%d/%d",
а нахрена ты не unicode функцию unicode стороку передаешь???
убери L
Yandex
Объявления
27.08.2012, 15:41     Блокировка кнопки выхода
Ответ Создать тему
Опции темы

Текущее время: 10:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru