C ++,如何使用新参数修改正在执行的程序

时间:2016-09-20 10:52:30

标签: c++ shellexecute

我发布的原始代码已被编辑,因为它似乎引起了混乱。我知道这是错的,但我只想用它作为一个例子。我想要使​​用的代码就是这个:

https://github.com/SFML/SFML/wiki/Source:-AnimatedSprite

你可以专注于这一部分:

while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
                window.close();
        }

        sf::Time frameTime = frameClock.restart();

        // if a key was pressed set the correct animation and move correctly
        sf::Vector2f movement(0.f, 0.f);
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            currentAnimation = &walkingAnimationUp;
            movement.y -= speed;
            noKeyWasPressed = false;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
        {
            currentAnimation = &walkingAnimationDown;
            movement.y += speed;
            noKeyWasPressed = false;
        }

让我们假设而不是

 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))

我希望这个程序能够根据从此代码外部收到的参数进行操作。

这将是我想要遵循的计划:

从我的C ++代码(让我们称之为Origin)我用这个命令调用这个程序(让我们称之为AnimatedSprite.exe):

 ShellExecute(NULL,NULL,"C:\\AnimatedSprite.exe",NULL ,NULL,SW_SHOWDEFAULT);

这将打开AnimatedSprite.exe而不发送任何命令。

现在我想保持开放并向他发送命令,例如

ShellExecute(NULL,NULL,"C:\\Try.exe",MyCommandLetter.c_str() ,NULL,SW_SHOWDEFAULT);

这样当我已经打开的AnimatedSprite.exe收到“MyCommandLetter”作为argv时(是的,我知道我必须在main中声明argc和argv,我必须修改原始代码)

它的确如下:

if (argv[1]=='a')
{
currentAnimation = &walkingAnimationUp;
                movement.y -= speed;
               noKeyWasPressed = false;
}

希望它更清楚。

如果我必须使用不是ShellExecute的其他功能并不重要,只要我能理解它是如何工作的(用这个例子就可以了)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的,正如我理解这个问题,你希望被调用程序对多个参数做出反应。在这种情况下,你应该建立你的主要不是单一的" if else"声明,而是一个循环的参数与"切换案例"声明,处理所有给定的参数。查看示例here