Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » саммый минимум на языке С/С++??

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

mec20

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
привет
Раскажите человеческим языком как сделать саммый минимум на языке С/С++??
Ну допустим маленькое окошко с кнопкой "Выключить комп" , при нажатии которой комп вырубится, но при этом чтобы ничего не надо было инсталить...
 
Visual studio 6.0

Всего записей: 119 | Зарегистр. 16-01-2005 | Отправлено: 04:55 11-02-2005
Men_In_Black



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
stdafx.h:
#pragma once
#include <windows.h>
#include <tchar.h>
 
shutdown.cpp:
 
#include "stdafx.h"
#include "shutdown.h"
 
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
 if (MessageBox(NULL, "Выключить компьютер?", "Выключить компьютер?",  
        MB_ICONEXCLAMATION | MB_OKCANCEL) == IDOK)
        ExitWindowsEx(EWX_POWEROFF /*| EWX_FORCE*/, NULL);
        // Флаг EWX_FORCE запрашивает "брутальный" shutdown, когда все процессы закрываются  
        // принудительно, без рассылки WM_QUERYENDSESSION и WM_ENDSESSION.
    return NULL;
}


Всего записей: 96 | Зарегистр. 27-08-2003 | Отправлено: 07:01 11-02-2005 | Исправлено: Men_In_Black, 07:09 11-02-2005
mec20

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
таких кодов в инете пруд пруди , я просил объяснить.

Всего записей: 119 | Зарегистр. 16-01-2005 | Отправлено: 18:57 11-02-2005
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mec20
Для начала надо знать синтаксис С++.


----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 19:18 11-02-2005
Exception_Granted



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mec20
 
Собсна тут и коментировать особо нечего, Men_In_Black написал код, который при запуске показывает вам дыалоговое окно с двумя кнопулями типа "М" и "Ж", простите увлекся на класику ....,  типа "Ок" и  "Cancel". Тыкать по Ок не советую - машина рубанется,  а вот "Cancel" - всегда пожалуйста.  Ну если говорить серйозно то,  по нажатию Ок вызывается WinApi функция которая и делает все ето черное дело.
 
З.Ы. Если вам этот код не понятен на протежении 15 мин - переверните страничку вверх ногами.
 
З.Ы.Ы. Если читать книги, все ставотся куда-более понятным

Всего записей: 76 | Зарегистр. 25-01-2005 | Отправлено: 00:55 12-02-2005
crek

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mec20
if (MessageBox(NULL, "Выключить компьютер?"....
в етом операторе IF при проверке вызывается функция MessageBox() , которая выводит Диалоговое окно , и в зависимости от нажатой кнопки пользователя возвращает значение 0 или 1 , если 1 то вызывается функция ExitWindowsEx() , которой в качестве параметра передаётся константа EWX_POWEROFF, которая и говорит каким способом выключить комп.
А
int APIENTRY _tWinMain(HINSTANCE hInstance,  
                     HINSTANCE hPrevInstance,  
                     LPTSTR lpCmdLine,  
                     int nCmdShow) ето всего лишь главная функция вашей программы которую вызовет сама винда , она сгенерена мастером проектов , не обращайте внимание.

Всего записей: 53 | Зарегистр. 08-01-2005 | Отправлено: 01:14 12-02-2005
mec20

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем!
 
Если не трудно , не могли бы объяснить куда мне это писать ? В компилятор? Куда как нажимать?
Этих книг начитался , надоели... Без практики и без помоши ничего не догоняю.

Всего записей: 119 | Зарегистр. 16-01-2005 | Отправлено: 05:57 12-02-2005
shevek

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А что такое _tWinMain ? специфичный  макрос мелкомягких сред ?
У Рихтера вроде упоминается только WinMain и wWinMain  для широких  строк ?
 
mec20

 Если не трудно , не могли бы объяснить куда мне это писать ?

В тривиальном варианте для Windows , тебе понадобится что нибудь типа Visual Studio начная с версии 6 и выше (лучше  7.1 ака .NET 2003).
Запускаешь , создаешь проект VC++\Win32 Project при создании выбираешь в мастере  чекбокс пустой проект.
В окне Solutions  выбираешь папку source files  , в ее контектсном меню Add New Item , добавляешь  новый С++ файл ,  вводишь туда листинг выше  нажимаешь Build , затем Run.
Без практики и без помоши ничего не догоняю.
Есть книги с практикой., после кажой главы.
Если нет проблем с английским то например совсем неплохо написана Sams - C++ Primer Plus,
Stephen Prata  .

Всего записей: 33 | Зарегистр. 17-01-2003 | Отправлено: 06:55 12-02-2005
kama3



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Если не трудно , не могли бы объяснить куда мне это писать ? В компилятор? Куда как нажимать?  
Этих книг начитался , надоели... Без практики и без помоши ничего не догоняю.

 
 
вы помоему немного преувеличиваете с выражением "этих книг начитался" - почитав книжки человек не задает вопросов куда вставлять код... про вин апи вы могли и не прочитать - но функции от переменных должны были научиться отличать... так что если вы и вправду прочитали много книжек по си и все еще находитесь на таком уровне - то я думаю вам лучше не заниматься программированием...  а то вдруг когда нибудь напишите как билл Windows 2015... так и будет весь мир мучаться..

Всего записей: 12 | Зарегистр. 07-10-2003 | Отправлено: 09:57 12-02-2005
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Могу вам сказать, что на NT based виндах комп не выключится: нужно получить соответствующие привилегии.

Код:
 
 
#include <windows.h>
#include <tchar.h>  
 
 
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
    if (MessageBox(NULL, "Выключить компьютер?", "Выключить компьютер?",  
        MB_ICONEXCLAMATION | MB_OKCANCEL) == IDOK)
    {
        HANDLE hToken;
        TOKEN_PRIVILEGES* NewState;
 
        OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, &hToken);
        NewState = (TOKEN_PRIVILEGES*) malloc (sizeof (TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
        NewState->PrivilegeCount = 1;
        LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &NewState->Privileges[0].Luid);
        NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL);
        free (NewState);
        CloseHandle (hToken);  
 
        ExitWindowsEx(EWX_POWEROFF /*| EWX_FORCE*/, NULL);
        // Флаг EWX_FORCE запрашивает "брутальный" shutdown, когда все процессы закрываются  
        // принудительно, без рассылки WM_QUERYENDSESSION и WM_ENDSESSION.
    }
    return NULL;
}


----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 11:03 12-02-2005 | Исправлено: KADABRA, 11:05 12-02-2005
mec20

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу тех кто пишет свои коментарии про Гейтса , кто из меня получится и т.д... не писать!
Эти умных вешей я наслышал , если можете конкретно написать(помочь) то напишите.
тэнкс

Всего записей: 119 | Зарегистр. 16-01-2005 | Отправлено: 04:26 14-02-2005
Prizrak7



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mec20

Цитата:
Прошу тех кто пишет свои коментарии про Гейтса , кто из меня получится и т.д... не писать!
Эти умных вешей я наслышал , если можете конкретно написать(помочь) то напишите.  

Видите ли, ваша проблема двояка : похоже вы не знакомы ни с языками программирования C и C++, ни с Win32 API. Пример "выключить комп" не является "саммым минимумом" и требует некоторых познаний в обеих областях.
 
Может стоит все таки начать с азов? Попробуйте заглянуть в параллельную ветку, там упоминается неплохое чтиво для начинающих.

Цитата:
Этих книг начитался , надоели...

Если вы надеетесь что кто-то из посетителей форума возьмется с нуля обучить вас программированию под Windows на C или C++ прямо в данной ветке, то боюсь вы переоцениваете запасы свободного времени и goodwill этих посетителей. Впрочем, возможно я буду приятно удивлен... Скорее здесь стоит задавать конкретные вопросы, тогда вы почти наверняка получите конкретные ответы.

Всего записей: 148 | Зарегистр. 22-09-2002 | Отправлено: 19:23 14-02-2005
Kalastiuz



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Может стоит все таки начать с азов? Попробуйте заглянуть в параллельную ветку, там упоминается неплохое чтиво для начинающих

Муа ха ха...
Уж там то вам насоветуют... это точно..
я как раз оттуда )))))))))))

Всего записей: 42 | Зарегистр. 01-07-2004 | Отправлено: 14:51 16-02-2005
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kalastiuz

Цитата:
Уж там то вам насоветуют... это точно..  

Ну а сейчас, ты уж совсем не прав!  
Как раз ты там и советовал самый трудный путь для новичков.  

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 15:19 16-02-2005
Kalastiuz



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну насчет "Самого" трудного ты загнул....
=) но зато верный путь...
 
в этом топике я подшутил так..

Всего записей: 42 | Зарегистр. 01-07-2004 | Отправлено: 16:16 16-02-2005
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kalastiuz

Цитата:
=) но зато верный путь...  

Но многим может совсем отбить охоту или, по крайней мере, надолго...

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 17:59 16-02-2005
Kalastiuz



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Но многим может совсем отбить охоту или, по крайней мере, надолго...  

Блин.. а кому сейчас легко?
 
небудем отходить от темы =) Но если вернуться в предложеный топик там уже пошли интересные дискуссии
 
Кстати самый минимум =)
 
void main()
{
 
}

Всего записей: 42 | Зарегистр. 01-07-2004 | Отправлено: 18:41 16-02-2005
Men_In_Black



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
shevek

Цитата:
А что такое _tWinMain ? специфичный  макрос мелкомягких сред ?

Да, это #define, определенный в tchar.h. Для unicode-программ вместо него при компиляции подставляется wWinMain, для ANSI - WinMain. Т.е., в ANSI-программе можно писать просто "WinMain" и все, в общем-то, будет в порядке. Определение функции-точки входа "... _tWinMain (...) ..." генерирует мастер 2003-й студии и, скорее всего, это специфика только данной среды разработки.
 
KADABRA

Цитата:
Могу вам сказать, что на NT based виндах комп не выключится

Я об этом думал... Однако, в привелегиях я пока "чайник", поэтому и привел самый простейший вариант (тем более, его как раз и просили). Кстати, этот код все-таки должен работать под достаточно доверительными аккаунтами ("администратор", "опытный пользователь"). С другой стороны, код с установкой привелегий уже достаточно зубодробителен и требует как минимум прочтения N-страничного руководства на языке Шекспира.

Всего записей: 96 | Зарегистр. 27-08-2003 | Отправлено: 08:25 28-02-2005 | Исправлено: Men_In_Black, 09:07 28-02-2005
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Men_In_Black

Цитата:
Кстати, этот код все-таки должен работать под достаточно доверительными аккаунтами ("администратор", "опытный пользователь").

Нет. Привилегии нужно получить процессу, а не пользователю.

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 12:11 28-02-2005
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Men_In_Black

Цитата:
Да, это #define, определенный в tchar.h. Для unicode-программ вместо него подставляется wWinMain, для ANSI - WinMain.

Это не совсем так:

Код:
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}

Кстати, если делаешь рестарт программы в студии всегда попадаешь сюда.

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 13:34 28-02-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » саммый минимум на языке С/С++??


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru