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 aufgerufenIch 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