none
壁紙の変更 RRS feed

  • 質問

  • VC++ExpressEditionで壁紙を変更するプログラムを作ろうとしています。

     

    コマンドライン引数でビットマップファイルの位置を指定するだけのものなんですが、

     

    LPSTR型からPVOID型への変換がうまくいっていないせいか、失敗してしまいます。

     

    なにかいい方法があれば教えてください。

     

    よろしくお願いします。

     

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------

     

    #include <windows.h>
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
    {

        SystemParametersInfo(SPI_SETDESKWALLPAPER,0, lpCmdLine, SPIF_UPDATEINIFILE);

        return 0;
    }

    2008年10月18日 4:22

回答

  •  TaK 1111 さんからの引用

    コマンドライン引数でビットマップファイルの位置を指定するだけのものなんですが、

    LPSTR型からPVOID型への変換がうまくいっていないせいか、失敗してしまいます。

    どのように失敗しているかを説明して下さい。

    そうでないと、当てずっぽうで回答するしかなく、本当に欲しい回答が得られないかもしれません。

     

     

     TaK 1111 さんからの引用

    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
    {

        SystemParametersInfo(SPI_SETDESKWALLPAPER,0, lpCmdLine, SPIF_UPDATEINIFILE);

        return 0;
    }

    Express Editionということなので、VC2005以降ですよね?

    Unicode文字セットになっていると、WinMainのやり口ではできないとか。

     

    プロジェクトのプロパティから、全般を選択して、文字セットが何になっているかを確認するとよいかもしれません。

    2008年10月18日 9:01
    モデレータ

すべての返信

  • GetLastError関数の結果はどうでした?
    2008年10月18日 6:38
  • コンパイルエラーなの?

    であれば、キャストすればいいと思います。

     

     

    2008年10月18日 8:07
  •  TaK 1111 さんからの引用

    コマンドライン引数でビットマップファイルの位置を指定するだけのものなんですが、

    LPSTR型からPVOID型への変換がうまくいっていないせいか、失敗してしまいます。

    どのように失敗しているかを説明して下さい。

    そうでないと、当てずっぽうで回答するしかなく、本当に欲しい回答が得られないかもしれません。

     

     

     TaK 1111 さんからの引用

    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
    {

        SystemParametersInfo(SPI_SETDESKWALLPAPER,0, lpCmdLine, SPIF_UPDATEINIFILE);

        return 0;
    }

    Express Editionということなので、VC2005以降ですよね?

    Unicode文字セットになっていると、WinMainのやり口ではできないとか。

     

    プロジェクトのプロパティから、全般を選択して、文字セットが何になっているかを確認するとよいかもしれません。

    2008年10月18日 9:01
    モデレータ
  •  

    ありがとうございます。

     

    環境はVisualC++2008ExpressEditionです。

     

    文字セットはなしにしています。

     

     

    変換がうまくいっていないというのは、lpCmdLineがLPSTR型ではなくPVOID型と同じだったからです。

     

    ビルドエラーは出ていません。

     

    SystemParamerterinfoは0を返しています。

    2008年10月18日 12:57
  •  TaK 1111 さんからの引用

    SystemParamerterinfoは0を返しています。

    GetLastErrorで何が起きているか調べましょうと言うアドバイスも出ていました。

     

    http://msdn.microsoft.com/en-us/library/ms724947.aspx

    Return Value
    If the function succeeds, the return value is a nonzero value.
    If the function fails, the return value is zero. To get extended error information, call GetLastError.

     

    手元のVisual C++ 2008では、プロジェクトを新規作成し、提示されたコードを貼り付けて、コンパイルすることで動作を確認できています。(Windows XP SP2)

    2008年10月18日 16:10
    モデレータ
  • 何が悪かったのかはわかりませんが、プロジェクトを作り直すとうまくいきました。

     

    お騒がせしてすいませんでした。
    2008年10月19日 5:23