Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vladimir от Сентябрь 13, 2011, 11:29



Название: Отключение компьютера
Отправлено: Vladimir от Сентябрь 13, 2011, 11:29
Доброго дня всем  :)
Нужно написать программку отключения, перезагрузки и переход в спящий режим компьютера на Qt! Как это можно реализовать, по средством каких классов, функций, методов? Подскажите пожалуйста!  :)


Название: Re: Отключение компьютера
Отправлено: Пантер от Сентябрь 13, 2011, 11:33
Под каждую платформу писать отдельное решение.


Название: Re: Отключение компьютера
Отправлено: Vladimir от Сентябрь 13, 2011, 11:35
Под каждую платформу писать отдельное решение.

Нужно под Windows


Название: Re: Отключение компьютера
Отправлено: Пантер от Сентябрь 13, 2011, 11:37
Кури WinAPI или заюзай команду shutdown.


Название: Re: Отключение компьютера
Отправлено: Vladimir от Сентябрь 13, 2011, 11:39
Кури WinAPI или заюзай команду shutdown.

пошел курить  ;D


Название: Re: Отключение компьютера
Отправлено: Vladimir от Сентябрь 13, 2011, 11:52
а какие библиотеки нужно подключить для работы с WinAPI ???


Название: Re: Отключение компьютера
Отправлено: Пантер от Сентябрь 13, 2011, 11:56
http://ru.wikipedia.org/wiki/Windows_API


Название: Re: Отключение компьютера
Отправлено: Vladimir от Сентябрь 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);
}


И это работает ;D


Название: Re: Отключение компьютера
Отправлено: k0p4 от Сентябрь 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, например. ЧЯДНТ?


Название: Re: Отключение компьютера
Отправлено: Rem Norton от Сентябрь 17, 2011, 00:15
На *.pro файл можно взглянуть?


Название: Re: Отключение компьютера
Отправлено: k0p4 от Сентябрь 17, 2011, 00:23
Спасибо, уже не надо. Решено добавлением в *про :
Код:
LIBS += user32.lib \
        Advapi32.lib