トップ回答者
壁紙の変更

質問
-
VC++ExpressEditionで壁紙を変更するプログラムを作ろうとしています。
コマンドライン引数でビットマップファイルの位置を指定するだけのものなんですが、
LPSTR型からPVOID型への変換がうまくいっていないせいか、失敗してしまいます。
なにかいい方法があれば教えてください。
よろしくお願いします。
-------------------------------------------------------------------------------------------------------------------------------------------------------
#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
{SystemParametersInfo(SPI_SETDESKWALLPAPER,0, lpCmdLine, SPIF_UPDATEINIFILE);
return 0;
}
回答
-
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のやり口ではできないとか。
プロジェクトのプロパティから、全般を選択して、文字セットが何になっているかを確認するとよいかもしれません。
すべての返信
-
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のやり口ではできないとか。
プロジェクトのプロパティから、全般を選択して、文字セットが何になっているかを確認するとよいかもしれません。
-
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)