• ベストアンサー

VC++.netで動画が再生されている時は、スクリーンセーバーが走らな

VC++.netで動画が再生されている時は、スクリーンセーバーが走らないプログラムを考えています OSの設定で、3分でスクリーンセーバーが起動するように設定したのですが、動画が4分くらいあると 動画が終了していないのにスクリーンセーバーが起動してしまいます。 自分でスクリーンセーバーを起動するプログラムを製作したほうが良いのでしょうか? プログラム初心者なのでどう手をつけて良いのかかりません 何か良い方法は、ないのでしょうか? よろしくお願いします。 開発環境は、VC++のExpressEditionです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

 こんにちは。補足頂きました。  form.hの中の、Form1クラスより外、namespace ???より中です。 namespace winclr{ using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; //追加 using namespace System::Runtime::InteropServices; //追加 const unsigned int SPI_SETSCREENSAVEACTIVE = 17; //追加 [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] int SystemParametersInfo(unsigned int uiAction, unsigned int uiParam, void* pvParam, unsigned int fWinIni); /// <summary> /// Form1 の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // //ウィンドウが開いた時に無効 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, 0); } protected: /// <summary> /// 使用中のリソースをすべてクリーンアップします。 /// </summary> ~Form1() { if(components) { delete components; } //ウィンドウが無くなった時に有効 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, 0); } private: /// <summary> /// 必要なデザイナ変数です。 /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> void InitializeComponent(void) { this->components = gcnew System::ComponentModel::Container(); this->Size = System::Drawing::Size(300,300); this->Text = L"Form1"; this->Padding = System::Windows::Forms::Padding(0); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; } #pragma endregion }; }

bimetal7
質問者

お礼

回答ありがとうございます また長文ありがとうございます メイン.cppでwindows.hを宣言していてuser32.dllも記述していたため イベントの項目に SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, 0); を記述しただけでできてしまいました ほんとうにお騒がせして申し訳ありませんでした 丁寧にご指導していただいてどうもありがとうございました。

その他の回答 (2)

回答No.2

 こんにちは。    http://msdn.microsoft.com/ja-jp/library/aa984739(VS.71).aspx using namespace System::Runtime::InteropServices; const unsigned int SPI_SETSCREENSAVEACTIVE = 17; [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] int SystemParametersInfo(unsigned int uiAction, unsigned int uiParam, void* pvParam, unsigned int fWinIni);  http://msdn.microsoft.com/ja-jp/library/cc429946.aspx  無効:  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, 0);  有効:  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, 0);  でスクリーンセーバーを停止出来ませんか。

bimetal7
質問者

お礼

回答ありがとうございます。 さっそく試してみたいのですが 初心者なので、どの部分に書いて良いかわかりません メイン.cppに using namespace System::Runtime::InteropServices; const unsigned int SPI_SETSCREENSAVEACTIVE = 17; [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] int SystemParametersInfo(unsigned int uiAction, unsigned int uiParam, void* pvParam, unsigned int fWinIni); を記述するの? Form.hのイベントで SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, 0); を記述すれば?? #using <mscorlib.dll> は記述しなければならないのでしょうか? 初心者で申し訳ありませんが 御指導お願いします

noname#118694
noname#118694
回答No.1

いくらか質問に不明点があるため、的確ではないかもしれませんが、要は自作アプリ起動中はスクリーンセーバーを起動したくないということですよね? どの程度のプログラミング初心者なのかわかりませんが、WM_SYSCOMMANDメッセージが来たとき、wParamの値がSC_SCREENSAVEなら問答無用で1を返すようにすれば起動しません。 一定時間毎にマウスカーソルをプログラム的に動かして抑制することも可能ですが、確実性は低いですね。(それでもマウスカーソルを動かして抑制する方式を採用しているソフトもあるようです)

参考URL:
http://support.microsoft.com/kb/403844/ja
bimetal7
質問者

お礼

回答ありがとうございます。 プログラム暦2ヶ月の初心者です axWindowsMediaPlayerが再生されている時にスクリーンセーバーが起動しないようにするので PlayStateChangeのイベントで、  if (e->newState == 3)//再生中 の後にどう記述すればよいのでしょうか 初心者で申し訳ありませんが ご指導のほど、よろしくおねがいします。