none
OSの変更(エアロ表示に変わったかどうか)のイベントを得ることができませんか? RRS feed

回答

すべての返信

  • WM_DWMCOMPOSITIONCHANGED メッセージですかね。

     WM_DWMCOMPOSITIONCHANGED Notification ()
     http://msdn.microsoft.com/en-us/library/aa969230(VS.85).aspx

     Aero Glass: デスクトップ ウィンドウ マネージャを使用して特殊効果を施す
     http://msdn.microsoft.com/ja-jp/magazine/cc163435.aspx
    • 回答としてマーク クサキ 2011年2月2日 1:17
    2011年2月1日 2:24
  • 最初、MFCのよく分からない、見たくないParametrがありどうしようかと思いましたが、
    2つ目のご案内のHPに素晴らしいC#のサンプルプログラムがあり無事できるようになりました。
    ありがとうございました。

    2011年2月2日 1:17
  • 最初、MFCのよく分からない、見たくないParametrがありどうしようかと思いましたが、

    最初のページは MFC とは関係ないですよ。
    Windows の SDK(Software Development Kit、ソフトウェア開発キット)に相当するページになります。

    今は必要としないかもしれませんが、Windows でプログラムを書いていくことを続けていれば、いずれこのようなドキュメントを読むことが必要になります。
    できれば、「見たくない」と切り捨てず、どういったことが書いてあるのかも気にして頂ければと思います。

    # たとえば、C# のサンプルがないような API を使う必要に迫られたとき。
    # あるいは、日本語のドキュメントで間違いがあり、英語のドキュメントを参照しないと正しい情報が得られなかったり。

    2つ目のご案内のHPに素晴らしいC#のサンプルプログラムがあり無事できるようになりました。

    ウィンドウメッセージを受け取っているだけでしょうか?
    Dwm で始まる関数を呼び出していると、Windows XP でそのプログラムを実行したときに例外が発生します。
    Windows XP で実行する可能性があるプログラムを書かれている場合、Dwm で始まる API を呼ぶ前にバージョンチェックするか、適切な型ので catch するかが必要になります。

    # Windows Vista / Windows 7 でしか実行しない、WndProc でウィンドウメッセージを待つだけであれば特に問題ありません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年2月2日 13:41
    モデレータ
  • > ウィンドウメッセージを受け取っているだけでしょうか?
    > Dwm で始まる関数を呼び出していると、Windows XP でそのプログラムを実行したときに例外が発生します。
    > Windows XP で実行する可能性があるプログラムを書かれている場合、Dwm で始まる
    > API を呼ぶ前にバージョンチェックするか、適切な型ので catch するかが必要になります。

    わざわざ、心配して頂きありがとうございました。

    protected override void WndProc(ref Message m) でOSのメッセージを
    受けとることができるようになりました。
    WM_DWMCOMPOSITIONCHANGED でエアロの状態かどうか判別できました。

    利用している、dwmapi.dllはVista以上だけで使うために、
    ”DLLの遅延読み込み”を行い、XP等での問題が発生しないようにしています。

    > 最初のページは MFC とは関係ないですよ。
    > Windows の SDK(Software Development Kit、ソフトウェア開発キット)に相当するページになります。
    VB6.0とMFCはグローバル関数で計算のみの利用だけで、MFCなのか、その前のものなのか、
    その前の前のものなのか、いろんなものがあるようで、良く理解できていません。
    いつも例題を見るのが大変です。C#だけで行ければありがたいのですが。

    その時のメッセージ指向?の説明が良く分からなかったり、
    例えば、文字型なのに、お互いを=で結びつけることが出来なかったり、引数が渡せなかったり、
    お呪いのようなコーディングが思い起こされ、できれば避けたい気持ちです。


    > 今は必要としないかもしれませんが、Windows でプログラムを書いていくことを続けていれば、
    > いずれこのようなドキュメントを読むことが必要になります。

    > できれば、「見たくない」と切り捨てず、どういったことが書いてあるのかも気にして頂ければと思います。
    > # たとえば、C# のサンプルがないような API を使う必要に迫られたとき。
    > # あるいは、日本語のドキュメントで間違いがあり、英語のドキュメントを
    > 参照しないと正しい情報が得られなかったり。

    C#の中で、全てが解決できたら良いと思いますが、現実はそうではないようです。
    今回もC#の例題が無かったら、どうして良いのか分からなかったと思います。
    C#でのイベントの体験や、今回の protected override void WndProc(ref Message m)
    などの体験を通して、C++の分からなかったことが少しづつ身近になってきている状態です。

    2011年2月3日 5:56
  • 利用している、dwmapi.dllはVista以上だけで使うために、
    ”DLLの遅延読み込み”を行い、XP等での問題が発生しないようにしています。

    DllImport のやり方でも遅延読み込み(呼ばれたときに読み込まれる)挙動になりますが、それとは別のやり方をされているのかな?
    (気になっただけです。回答されなくても問題ありません)

    いつも例題を見るのが大変です。C#だけで行ければありがたいのですが。

    Windows と同時に .NET Framework がバージョンアップし、さらに新機能にも対応していればそういう時代も来るかもしれませんが、現状は Win32API を直接利用しないと実現できないことも多々あります。
    しばらくは SDK のドキュメントを読んで、自分で API を使うなどといったことは必要だと思われます。

    その時のメッセージ指向?の説明が良く分からなかったり、
    例えば、文字型なのに、お互いを=で結びつけることが出来なかったり、引数が渡せなかったり、
    お呪いのようなコーディングが思い起こされ、できれば避けたい気持ちです。

    SDK はどうしても、C や C++ よりになっています。
    ただ、C や C++ で書かなければいけないということは(多くの場合は)ないので、そういったドキュメントを読んで C# に活かせるようになっていければ良いと思います。
    もちろん、C や C++ の経験があると、理解しやすいのは確かですが…。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年2月3日 14:05
    モデレータ
  • > DllImport のやり方でも遅延読み込み(呼ばれたときに読み込まれる)挙動になりますが、
    > それとは別のやり方をされているのかな?
    DllImport のやり方でもできるのですか?

    今回私の場合は、DwmIsCompositionEnablMFCのDLLを作成するプロジェクトで利用していまして、
    そのプロジェクトのプロパティ/構成プロパティ/リンカ/入力/遅延読み込み
    で、dwmapi.dllを指定しました。

     

    2011年2月4日 1:56
  • DllImport のやり方でもできるのですか?

    DllImport で書いた場合、その関数を呼び出す時点で読み込まれるはずです。
    存在しない場合は、呼び出した時点で例外が発生します。

    今回私の場合は、DwmIsCompositionEnablMFCのDLLを作成するプロジェクトで利用していまして、
    そのプロジェクトのプロパティ/構成プロパティ/リンカ/入力/遅延読み込み
    で、dwmapi.dllを指定しました。 

    その方法を採ったと言うことは、先に Windows のバージョンを判定されていると言うことでしょうか。
    (遅延読み込みを設定したところで、関数を呼ぼうとしたときに問題となるはずなので)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年2月4日 14:09
    モデレータ
  • 先に Windows のバージョンを判定して、Vista以降の場合だけ実行しています。

     

    2011年2月7日 2:37