Bildschirmschoner - kleines Problem...



  • Huhu 🙂

    Ich weiss, um fuer Windows Bildschirmschoner zu schreiben gibts 2 Moeglichkeiten: entweder ueber die scrnsave.lib und WinAPI-Funktionen, oder indem man eine "normale" .exe schreibt und einfach die uebergebenen Commandozeilen-Argumente testet.
    Da ich keine Ahnung von der WinAPI habe, hab ich mich fuer 2tere Variante entschieden, leider funktioniert sie nicht wie sie sollte:

    folgender Code in meiner int main():

    int main (int argc, char *argv[])
    {
    	#ifdef DEBUG
    	fprintf(stderr, "ARGUMENTS:\n");
    	for (int i = 0; i <= argc; ++i)
    	{
    		fprintf(stderr, "%d: %s\n", i, argv[i]);
    	}
    	#endif
    
    	// screensavers are called with /S as argument if they're supposed
    	// to run in screensavermode, otherwhise in configuration-mode
    	// (somewhere i read that /C is passed as argument for configuration,
    	// but WinXP doesn't seem to stick to that?-) )
    	if (argc < 1 || strcmp(argv[1], "/S") == 0)
    	{
    		#ifdef DEBUG
    		fprintf(stderr, "Mode: screensaver\n");
    		#endif
    		SdlScreensaver screensaver;
    		screensaver.run();
    	}
    	else //(argc < 1 || strcmp(argv[1], "/C") == 0)
    	{
    		#ifdef DEBUG
    		fprintf(stderr, "Mode: configuration\n");
    		#endif
    		changeConfiguration();
    	}
    
    	#ifdef DEBUG
    	fprintf(stderr, "... exiting\n");
    	#endif
    
    	return 0;
    }
    

    Der "Screensaver-Modus" an und fuer sich funktioniert problemlos... etwas verwundert bin ich zwar ueber die Ausgabe auf stderr:

    ARGUMENTS:
    0: E:\works\coding\cpp\blueScreen_Saver\bin\blueScreen_Saver.scr
    1: /S
    2: (null)
    Mode: screensaver
    ... exiting
    

    Warum erhalte ich so ein komisches 2tes Argument? 😕

    Egal, mein eigentliches Problem ist der "Konfigurationsmodus:
    ich kann's drehen und wenden wie ich will, dieser Modus wird einfach nicht aufgerufen 😕 Ich erhalte auch kein "/C" als Commandozeilen-Argument, obwohl ich das im Internet oefters so dokumentiert fand... 😕

    Uebersehe ich etwas ganz, ganz offensichtliches????

    Ach ja, auch komisch: eigentlich sollte, wenn das Programm nicht mit "/S" gestartet wird, ja automatisch zum "else" gesprungen werden, und demnach auch "Mode: configuration" auf STDERR ausgegeben werden... allerdings steht da nix dergleichen:

    ARGUMENTS:
    0: E:\works\coding\cpp\blueScreen_Saver\bin\blueScreen_Saver.scr
    1: (null)
    

    nix weiter... auch kein "... exiting" 😕 woran koennte es liegen?

    ich linke auch die libSDL zum Projekt dazu, sollte das etwas zu sagen haben ?-)



  • for (int i = 0; i <= argc; ++i)
    

    argc ist die Länge. Arrays werden in C aber von 0 bis Länge-1 angesprochen...

    if (argc < 1 || strcmp(argv[1], "/S") == 0)
    

    und argc ist immmer >= 1. In argv[0] steht der Programmaufruf.



  • DrGreenthumb schrieb:

    for (int i = 0; i <= argc; ++i)
    

    argc ist die Länge. Arrays werden in C aber von 0 bis Länge-1 angesprochen...

    if (argc < 1 || strcmp(argv[1], "/S") == 0)
    

    und argc ist immmer >= 1. In argv[0] steht der Programmaufruf.

    Recht herzlichen Dank 🙂

    Aber warum ist dann argv[argc] immer "(Null)"... sorgt Windows da automatisch fuer?

    Jedenfalls vielen Dank 🙂



  • schreibt der Standard AFAIK vor


Anmelden zum Antworten