Russian Qt Forum
Ноябрь 24, 2024, 22:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключение компьютера  (Прочитано 5521 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Сентябрь 13, 2011, 11:29 »

Доброго дня всем  Улыбающийся
Нужно написать программку отключения, перезагрузки и переход в спящий режим компьютера на Qt! Как это можно реализовать, по средством каких классов, функций, методов? Подскажите пожалуйста!  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 13, 2011, 11:33 »

Под каждую платформу писать отдельное решение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Сентябрь 13, 2011, 11:35 »

Под каждую платформу писать отдельное решение.

Нужно под Windows
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Сентябрь 13, 2011, 11:37 »

Кури WinAPI или заюзай команду shutdown.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #4 : Сентябрь 13, 2011, 11:39 »

Кури WinAPI или заюзай команду shutdown.

пошел курить  Смеющийся
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #5 : Сентябрь 13, 2011, 11:52 »

а какие библиотеки нужно подключить для работы с WinAPI Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Сентябрь 13, 2011, 11:56 »

http://ru.wikipedia.org/wiki/Windows_API
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #7 : Сентябрь 13, 2011, 12:40 »

Вот, что нашел в инете..

Код:
int ShutdownWindows()
{
  HANDLE            hToken;
  LUID              takeOwnershipValue;
  TOKEN_PRIVILEGES  tkp;
  if (!OpenProcessToken(GetCurrentProcess(),
                        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    return 0;
  if (!LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &takeOwnershipValue))
    return 0;
  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Luid = takeOwnershipValue;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, false, &tkp, sizeof(TOKEN_PRIVILEGES), 0, 0);
  if (GetLastError())
    return 0;
 
  return ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}


И это работает Смеющийся
Записан
k0p4
Гость
« Ответ #8 : Сентябрь 17, 2011, 00:02 »

Доброго вечера.
Дабы не засорять форум спрошу сдесь.

имеем такой код :

Код:
#include <QtGui>
#include <qt_windows.h>
#include <Windows.h>

#include "button.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

    simpleQButton *btn;

    int ShutdownWindows();

    QMessageBox *b;

    ~Widget();

public slots:
    void clickedBtn();
    void someOtherSlot();
};

и срр файл :
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    btn = new simpleQButton;
    btn->setSomeText("some text setted");
    connect(btn,SIGNAL(clicked()), this,SLOT(clickedBtn()));
   
    QHBoxLayout *h = new QHBoxLayout;
    h->addWidget(btn);
    setLayout(h);
}

void Widget::clickedBtn()
{
    ShutdownWindows();
}
// взята с форума.
int ShutdownWindows()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    DWORD dwRetVal;

// Получаем маркер (token) для этого процесса.
  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
     return (GetLastError());

// Получаем LUID для привилегии выключения (shutdown).
  LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Получаем привилегию выключения (shutdown) для этого процесса.
  AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
  if ((dwRetVal = GetLastError()) != ERROR_SUCCESS) return dwRetVal;

// Выключаем или перезагружаем в соответствие с ExitFlags
  if (!ExitWindowsEx(EWX_LOGOFF|EWX_REBOOT, 0)) return (GetLastError());
}
void Widget::someOtherSlot()
{ }
Widget::~Widget()
{ }

Компилятор ругаеться на неопределённые функции, такие как ExitWindowsEx, например. ЧЯДНТ?
Записан
Rem Norton
Гость
« Ответ #9 : Сентябрь 17, 2011, 00:15 »

На *.pro файл можно взглянуть?
Записан
k0p4
Гость
« Ответ #10 : Сентябрь 17, 2011, 00:23 »

Спасибо, уже не надо. Решено добавлением в *про :
Код:
LIBS += user32.lib \
        Advapi32.lib
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 22.