スクリーンセーバーの作成。コマンドライン処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うずら

スクリーンセーバーの作成。コマンドライン処理について

#1

投稿記事 by うずら » 11年前

こんばんは。
DXライブラリを使用してスクリーンセーバーを作成しているのですが、コマンドラインについて疑問点があるので教えてください。
Screen Saver Libraryは使用していません。

コマンドライン引数について

コード:

{
    char lcCmd[16];

    sscanf_s(lpCmdLine, "//%s", lcCmd);

    if (strcmp(lcCmd, "c") == 0)
    {
      MessageBox(NULL, "設定はないです", "スクリーンセーバー", MB_OK);
      return 0;
    }
  }
上のコードは、WinMain関数内で最初に行う”コマンドラインの解析”を実行しようとしたのですが、うまく動作しません。
/c のコマンドが送られてくることを想定しているのですが・・・手動で /c指定をしてもこのコードに入りません。
理由と解決策を教えてください。

外に処理すべきオプションは/sと/pだけかどうかについての情報もお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: スクリーンセーバーの作成。コマンドライン処理について

#2

投稿記事 by みけCAT » 11年前

うずら さんが書きました:/c のコマンドが送られてくることを想定しているのですが・・・手動で /c指定をしてもこのコードに入りません。
理由と解決策を教えてください。
ここで使用されているsscanf_s関数がC言語標準ライブラリのsscanfと同じ機能を持っていると仮定すると、
lpCmdLineが"/c"から始まっていると仮定しても、"//%s"という書式では"c"の部分を読み込めません。

適当な解決策は、lpCmdLineが指す文字列に"/c"が含まれているかをstrstr関数などで調べ、
存在すれば"/c"オプションが指定されたとして処理する、という方法があります。
ただし、この方法だと、例えば"hoge.exe neko/cat.txt"というコマンドラインでも"/c"オプションがあるとみなされてしまいます。

きちんとした解決策は、真面目にコマンドラインを解析して判定することです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

うずら

Re: スクリーンセーバーの作成。コマンドライン処理について

#3

投稿記事 by うずら » 11年前

真面目に処理しようと思ったんですが、よくわからないしそこまでしなくていいと思ったので
結局strstr関数で処理しました。みけCATさん、ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る