モニターの電源を切れ

今日、iPod Touchの車載用FMトランスミッター兼充電器買ってきました。エンジンの始動とともに音楽が始まるところは便利です(^^

バッファローコクヨ・FMトランスミッター

雑音(ノイズ)も入るのかな~、と思ってましたが、そんなこともなく、なかなかです。明日のドライブに重宝しそうです(^^

で、本題です。

デスクトップパソコンで、電力消費の高いパーツの一つはやっぱりモニタでしょう。時間のかかる処理やちょっと席を離れるときモニタのメインスイッチを押してオフにするんですが・・・新しいDELLのモニタは、ちょっとそれができない・・・というか、やりたくない事情があります。(ショーもないことなんだけど…)

先日購入したDELL U2410 は、USBポートが四つあって、PC側からモニタのアップストリーム側にケーブルをつなぐと、4つのUSBポートと、メモリカードリーダーが使用できるようになってます。で、このUSBポートにマウスとキーボードを繋いでいるんですね・・・。で・・・モニタのメインスイッチをON/OFFするたびに、このUSBポート(ハブ)か、カードリーダーかが、オフラインになるのか、「ハードウェアの接続・取り外し」のサウンドがけたたましくなってしまいます。これは精神上良くない! ってことで、モニターをスリープ状態(省電力モード)にするコードを書くしかない、ということで、書いてみました。

/*
  モニターを省電力モードに。
  cl sleep_monitor.c
*/

// SendMessage,Sleep関数のため、kernel32.lib,user32.libをリンク
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")

//デフォルトライブラリを使用しない
#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/entry:WinMain")

//なくてもいいけど一応
#pragma comment(linker, "/subsystem:windows")

#include <windows.h>

int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    int nShowCmd )
{
  SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,1);
  Sleep(1000);
  SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
  return 0;
}

/*
 【追記】
   はじめ上手くいってたんですが、すぐ復帰してしまいました。
   Sleep()API関数をはさんで一秒ほど待機すると省電力モードに移行。
   理屈は、よく良く分かんないです。

 【追記2】
   #pragma 追加修正
*/

本体部分はたった二行で済むので・・・「書いてみました」というレベルではないです(^^;

で、解決です(^^

#pragma comment(lib,"user32.lib")