anti-prestige-tool/kwin_capture_screen.cpp
2026-05-01 10:26:41 +01:00

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;
}