使用自定义初始屏幕隐藏另一个进程的启动画面不适用于Qt :: WindowsStaysOnTopHint

时间:2016-09-17 12:29:12

标签: c++ qt splash-screen

我正在尝试使用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: 最初的游戏是魔兽争霸III:冰封王座。原始的启动画面看起来与此类似,但版权免责声明并且右上角没有暴雪徽标:https://upload.wikimedia.org/wikipedia/en/8/87/Warcraftiii-frozen-throne-boxcover.jpg

我已经在代码中添加了文本,现在每个人都看到我保留它。 如果允许或不允许,我不确定,但你必须安装魔兽争霸III:无论如何安装冰封王座并玩原始游戏。

可以在此处找到修改:http://www.moddb.com/mods/warcraft-iii-the-power-of-fire

我的启动画面图片如下所示: enter image description here

当然弹出时会添加黄色文字。

由于我没有隐藏原始游戏或原始版权文本等,因此您很难说它是非法的。 ModDB上有许多修改,它们改变了游戏的图形/徽标等,只能用于原始游戏。所以你仍然需要购买游戏....我甚至没有修改游戏。即使您认为允许,如果您写一些内容,请讨论原始技术问题。这是一个技术问题,另一个进程的启动画面位于所有其他窗口的顶部。

1 个答案:

答案 0 :(得分:1)

这里要考虑两件事 - 您尝试修改的产品的许可证以及此产品修改其内容的方式。这些决定了第三方与给定产品进行交互(代码方式)的方式。

无论您喜不喜欢,启动画面都是应用程序的一部分。在您的问题中,您已明确说明

  

我无法修改过程本身

这意味着您无法访问其源代码(即使您执行了许可证,也必须考虑使用该源代码可以执行的操作),并且应用程序本身显然没有为第三方提供修改其内容的方法(例如,一些游戏开发者允许他们的游戏使用mod,因此他们也为其提供基础设施)。

即使有最好的意图,你所尝试的也是违反一系列版权法。此外,您可能想要考虑您正在进行的修改,因为从外观上看,开发人员显然不希望第三方在原始版本之上添加任何内容。如果我错了,那么你应该与其背后的人直接接触并清除问题。即使允许修改可能不是游戏特定部分的情况(例如闪屏)。

最后但并非最不重要的是,我建议您发布有关您要修改的应用程序(游戏或其他)的信息,包括其许可证。这样可以防止人们认为你想做违法的事情(当我告诉你在那个方向阅读你的帖子时,请相信我。)