Qt Making Windows and/or Linux Shutdown using a button.
-
Hello, I'm wondering, what are the commands for Linux and Windows to make my program shutdown Windows or Linux using a button, I think somebody said shell32 for Windows, but not really sure.. I want a button that has Shutdown, another that has Restart, another that has Sleep, and another that has Standby. The rest I can do on my own, it's the command to shutdown is what I'm struggling with.. Thanks in advance
-
A simple googling will do, though i haven't tested this
For win: http://samanathon.com/windows-tip-shutdown-your-computer-with-the-command-prompt/
For linux: http://linux.about.com/od/commands/l/blcmdl8_shutdow.htmYou can run this in a QProcesss [ http://doc.qt.nokia.com/4.7/qprocess.html ] once the corresponding button is clicked.
-
For Linux ( Tested )..
@bool verbose;@@
//SUSPENDvoid Converter::suspend()
{
bool gnome_power1 = false;
bool gnome_power2 = false;
bool hal_works = false;
QDBusMessage response;gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh suspend"); gnome_power2 = QProcess::startDetached("gnome-power-cmd suspend"); if(!gnome_power1 && !gnome_power2 && verbose) qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; if(!gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Suspend",0); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else hal_works = true; } if(!hal_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DeviceKit.Power", QDBusConnection::systemBus()); response = powermanagement.call("Suspend"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } }
}
//SHUTDOWN
void Converter::shutdown()
{ bool shutdown_works = false;
bool gnome_power1 = false;
bool gnome_power2 = false;
bool hal_works = false;
QDBusMessage response;QDBusInterface gnomeSessionManager("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", QDBusConnection::sessionBus()); response = gnomeSessionManager.call("RequestShutdown"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh shutdown"); gnome_power2 = QProcess::startDetached("gnome-power-cmd shutdown"); if(verbose && !gnome_power1 && !gnome_power2) qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; } else shutdown_works = true; QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface", QDBusConnection::sessionBus()); response = kdeSessionManager.call("logout", 0, 2, 2); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else shutdown_works = true; if(!shutdown_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Shutdown"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else hal_works = true; } if(!hal_works && !shutdown_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); response = powermanagement.call("Stop"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); QProcess::startDetached("sudo shutdown -P now"); } }}
@
-
@
//REBOOT
void Converter::reboot()
{bool reboot_works = false;
bool gnome_power1 = false;
bool gnome_power2 = false;
bool hal_works = false;
QDBusMessage response;QDBusInterface gnomeSessionManager("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", QDBusConnection::sessionBus()); response = gnomeSessionManager.call("RequestReboot"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh reboot"); gnome_power2 = QProcess::startDetached("gnome-power-cmd reboot"); if(verbose && !gnome_power1 && !gnome_power2) qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; } else reboot_works = true; QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface", QDBusConnection::sessionBus()); response = kdeSessionManager.call("logout", 0, 2, 1); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else reboot_works = true; if(!reboot_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Reboot"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else hal_works = true; } if(!hal_works && !reboot_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); response = powermanagement.call("Restart"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); QProcess::startDetached("sudo shutdown -r now"); } }}
//HIBERNATE
void Converter::hibernate()
{bool gnome_power1 = false;
bool gnome_power2 = false;
bool hal_works = false;
QDBusMessage response;gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh hibernate"); gnome_power2 = QProcess::startDetached("gnome-power-cmd hibernate"); if(!gnome_power1 && !gnome_power2 && verbose) qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; if(!gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Hibernate"); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } else hal_works = true; } if(!hal_works && !gnome_power1 && !gnome_power2){ QDBusInterface powermanagement("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DeviceKit.Power", QDBusConnection::systemBus()); if(response.type() == QDBusMessage::ErrorMessage){ if(verbose) qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } }}
//LOCK
void Converter::lock()
{
if(system("gnome-screensaver-command -l") && system("dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock"))
QMessageBox::warning(this, "Error", "Unable to lock computer.", QMessageBox::Ok, NULL);}@