59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
#include <QCoreApplication>
|
|
#include <QDBusConnection>
|
|
#include <QDBusError>
|
|
#include <QDBusInterface>
|
|
#include <QDBusReply>
|
|
#include <QDBusUnixFileDescriptor>
|
|
#include <QFile>
|
|
#include <QTextStream>
|
|
#include <QVariantMap>
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
QCoreApplication app(argc, argv);
|
|
QTextStream err(stderr);
|
|
|
|
if (argc != 3) {
|
|
err << "usage: " << argv[0] << " OUTPUT_NAME OUTPUT_FILE\n";
|
|
return 64;
|
|
}
|
|
|
|
const QString outputName = QString::fromLocal8Bit(argv[1]);
|
|
const QString outputPath = QString::fromLocal8Bit(argv[2]);
|
|
|
|
QFile file(outputPath);
|
|
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
|
err << "failed to open output file: " << file.errorString() << "\n";
|
|
return 1;
|
|
}
|
|
|
|
QDBusInterface iface(
|
|
QStringLiteral("org.kde.KWin"),
|
|
QStringLiteral("/org/kde/KWin/ScreenShot2"),
|
|
QStringLiteral("org.kde.KWin.ScreenShot2"),
|
|
QDBusConnection::sessionBus());
|
|
|
|
if (!iface.isValid()) {
|
|
err << "failed to connect to KWin ScreenShot2: "
|
|
<< iface.lastError().message() << "\n";
|
|
return 1;
|
|
}
|
|
|
|
QVariantMap options;
|
|
QDBusUnixFileDescriptor fd(file.handle());
|
|
QDBusReply<QVariantMap> reply = iface.call(
|
|
QStringLiteral("CaptureScreen"),
|
|
outputName,
|
|
options,
|
|
QVariant::fromValue(fd));
|
|
|
|
file.close();
|
|
|
|
if (!reply.isValid()) {
|
|
err << "CaptureScreen failed for " << outputName << ": "
|
|
<< reply.error().name() << ": " << reply.error().message() << "\n";
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|