とぴやまのブログ(アーカイブ)

元はてなダイアリー

PostMessage(FindWindow("ProgMan", 0))

  HWND  hwnd = FindWindow("ProgMan", 0);
  if (hwnd) {
    PostMessage(hwnd, WM_APPCOMMAND, 0, APPCOMMAND_VOLUME_UP << 16);
  }

Windows シェルに表示されない「Program Manager」というキャプションのウィンドウ。Windows XP SP2 から起動しなくなったプログラムマネージャこと ProgMan.exe との関連性は何だろう?

上記のようにメッセージを送ることで、ボリュームアップを行うことが出来る。他にも次のようなことが出来るらしい。

    /* WM_APPCOMMAND = 0x0319, WM_SYSCOMMAND = 0x0112 */

    /* ボリュームアップ : APPCOMMAND_VOLUME_UP = 10 */
    PostMessage(hwnd, WM_APPCOMMAND, 0, APPCOMMAND_VOLUME_UP << 16);
    
    /* ボリュームダウン APPCOMMAND_VOLUME_DOWN = 9 */
    PostMessage(hwnd, WM_APPCOMMAND, 0, APPCOMMAND_VOLUME_DOWN << 16);

    /* ミュート(toggle) : APPCOMMAND_VOLUME_MUTE = 8 */
    PostMessage(hwnd, WM_APPCOMMAND, 0, APPCOMMAND_VOLUME_MUTE<< 16);

    /* monitor off : SC_MONITORPOWER = 0xF170 */
    PostMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

    /* screen saver : SC_SCREENSAVE = 0xF140 */
    PostMessage(hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);