Скрытие заставки другого процесса с настраиваемой заставкой не работает с Qt :: WindowsStaysOnTopHint

Я пытаюсь запустить процесс с Qt, который показывает свой собственный экран-заставку. Я хочу разместить свой собственный экран-заставку над экраном-заставкой этого процесса (этот процесс не имеет ничего общего с Qt, это игра!), Поскольку я не могу изменить сам процесс. Это должно скрыть заставку процесса и вместо этого показать мой. Поэтому я использую флаг Qt :: WindowStaysOnTopHint. В большинстве случаев это работает, но иногда я все еще вижу заставку процесса поверх моей собственной заставки. Есть ли способ удостовериться, что никакое другое окно не находится над моим заставкой, кроме как полноэкранная версия моего процесса? Могу ли я как-то поймать дескриптор окна процесса и проверить, когда он становится полноэкранным или есть лучший флаг?

Процесс начинается с заставки, а затем становится полноэкранной игрой. Конечно, я не хочу перекрывать мой экран-заставку в этой полноэкранной игре, только ее экран-заставка в начале.

#include <QApplication>
#include <QMessageBox>
#include <QProcess>
#include <QSplashScreen>int main(int argc, char** argv)
{
QApplication app(argc, argv);

// This is a modified game which has a splash screen I want to hide. I still show the copyright stuff in the picture ...
const QString program = "../TPoF.exe";
QStringList arguments;
// This is my custom splash screen picture with an different logo thatn the one of the original game but still has the copyright remarks (Everybody knows that this is a modification anyway)
QPixmap pixmap(":/cropped-dmdf-big.jpg");
// The flag should make the splash screen overlay the existing one but does not always work.
QSplashScreen splash(pixmap, Qt::WindowStaysOnTopHint);
splash.showMessage(QObject::tr("Copyright 2003 Blizzard Entertainment. All rights reserved. (Warcraft III: The Frozen Throne)"), Qt::AlignCenter | Qt::AlignBottom, QColor(0xFFCC00));
splash.show();
app.processEvents();

QProcess *myProcess = new QProcess(&app);
myProcess->start(program, arguments);

// Since I don't know how long the original splash screen stays there, I just wait until the whole process has finished. This is not a problem since the game is started in full screen.
myProcess->waitForFinished();

splash.close();

return 0;
//return app.exec();
}

редактировать:
Видимо, некоторые люди не получают вопрос, поэтому я добавлю это:
Это модификация игры, и в игре по умолчанию отображается логотип. Когда пользователь запускает мою модификацию, он будет думать, что он запускает нормальную игру, а не мою модификацию! Поэтому я добавил специальный экран-заставку, чтобы с самого начала сообщить ему, что он запускает модификацию. К тому же оригинальный логотип не соответствует моей модификации. Конечно, я все еще могу добавить текст об авторских правах и т. Д., Но это не является частью вопроса, так как я знаю, как это сделать с помощью QSplashScreen. Вопрос в том, как показать заставку / QWidget поверх ВСЕХ других окон, так как Qt :: WindowsStaysOnTopHint не всегда работает.

edit2:
Оригинальная игра — Warcraft III: The Frozen Throne. Оригинальный экран-заставка выглядит примерно так, но с отказом от авторских прав и без логотипа Blizzard в правом верхнем углу: https://upload.wikimedia.org/wikipedia/en/8/87/Warcraftiii-frozen-throne-boxcover.jpg

Я добавил текст в код теперь, когда все видят, что я его храню.
Если это разрешено или нет, я не уверен, но вам все равно придется установить Warcraft III: The Frozen Throne и играть в оригинальную игру.

Модификация может быть найдена здесь: http://www.moddb.com/mods/warcraft-iii-the-power-of-fire

Моя заставка выглядит так:
введите описание изображения здесь

Конечно, желтый текст добавляется, когда он появляется.

Поскольку я не скрываю ни оригинальную игру, ни оригинальный текст об авторских правах и т. Д., Вряд ли можно сказать, что это незаконно. В ModDB есть множество модификаций, которые изменяют графику / логотипы и т. Д. Игры и которые могут использоваться только с оригинальной игрой. Так что вам все равно придется покупать игру …. Я даже не изменяю игру. Даже если вы считаете, что это разрешено, обсудите оригинальный технический вопрос, если вы что-то напишите. Техническая проблема заключается в том, что заставка другого процесса находится поверх всех остальных окон.

-1

Решение

Здесь необходимо учитывать две вещи: лицензию на продукт, который вы пытаетесь изменить, и средства, которые этот продукт предоставляет для изменения его содержимого. Они определяют способы взаимодействия третьей стороны (в коде) с данным продуктом.

Заставка является частью приложения нравится тебе или нет. В своем вопросе вы четко заявили, что

Я не могу изменить сам процесс

Это означает, что у вас нет доступа к его исходному коду (и даже если вы включили лицензию и вам нужно подумать о том, что вы можете сделать с этим исходным кодом), а само приложение явно не предоставляет средства для третьей стороны, чтобы изменить его содержимое (например, некоторые разработчики игр разрешают использовать моды для своих игр и, таким образом, они также предлагают инфраструктуру для этого).

Даже с самыми лучшими намерениями вы пытаетесь нарушить закон об авторском праве. Также вы можете подумать о том, какие изменения вы делаете, поскольку, судя по всему, разработчик явно не хочет, чтобы третьи лица добавляли что-либо поверх оригинала. Если я ошибаюсь, тогда вы должны вступить в прямой контакт с людьми, стоящими за этим, и прояснить ситуацию. Даже если изменения разрешены, это может быть не так для определенных частей игры (например, заставки).

И последнее, но не менее важное: я бы посоветовал вам опубликовать информацию о приложении, которое вы хотите изменить (игру или что-то еще), включая его лицензию. Это помешает людям думать, что вы хотите сделать что-то незаконное (и поверьте мне, когда я скажу вам, что чтение вашего поста указывает на это).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]