Название: Отключение компьютера
Отправлено: 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
|