スキップしてメイン コンテンツへ

 none
Windows 7でPostMessageが動作しない RRS feed

  • 質問

  • Windows Vista(SP1)で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりは正常ですが、
    Windows 7で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりが、できません。
    Windows 7 では、PostMessage APIは使用できないのでしょうか?
    できないようでしたら代わりのAPIを教えてください。
    よろしく、お願いいたします。

    2009年9月5日 16:31

回答

  • こちらのPostMessage のことでしょうか? Windows 7で仕様が変わったという記載もありませんし、そのような話も聞きませんでした。
    ちなみにWindows Vistaの時に仕様追加がありました。具体的にはUIPIの制限に引っかかるとPostMessageは動作しません。
    しかし、そのVistaでは動いていたとのことですし。

    考えられる可能性はVistaとWindows 7とで設定が異なるということです。
    つまり、試されたVistaではUIPIが無効にされていてPostMessageが動作したものの、Windows 7ではUIPIを有効にしていたために動作しなくなった、と。
    逆に言えば、UIPIを有効にしたVistaでも本当は動作していなかったのかもしれません。
    これに関してはUIPIによる問題を検証方法 に関するドキュメントがありますので、試してみるとわかります。

    「やりとりが、できません。」ではなくもっと具体的にエラーコードとか書いて欲しいです。
    2009年9月5日 22:57
  • Windows Vista(SP1)で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりは正常ですが、
    Windows 7で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりが、できません。
    「やりとりができない」とはどういったところまで見られたのでしょうか?
    メッセージが全く飛んでこない(一方向だけ?両方向?)のか、メッセージは飛んでくるけれども wParam, lParam の値が期待したものと異なるのか、どの程度まで確認されているのでしょうか?


    ところで、Vista 環境と Win7 環境の UAC の設定の差はあるのでしょうか?
    また、Vista 環境と Win7 環境で管理者として実行する・しないの差や、デバッグ実行している・していないの差はあるのでしょうか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年9月6日 3:31
    モデレータ
  • 一つ気になったのですが、
    VB.NET2005で開発したアプリとVB.NET2003で開発したアプリなので
    どちらもVB.NET2005で開発したアプリにする必要があるのでしょうか?
    そのようなことはないはずです。
    いくつか、下記に質問を並べておきます。

    ・失敗する状況での PostMessage の戻り値は 0 なのでしょうか?
    ・戻り値が 0 である場合、GetLastError はどのような戻り値でしょうか?
    ・ウィンドウメッセージはどのような数値を送っているのでしょうか?
    ・今回の実験しているアプリ以外に、新たにテスト用に作成したアプリでも再現するのでしょうか?
    ・再現するアプリで PostMessage する箇所、WndProc で処理する箇所を抜粋することはできますか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年9月6日 22:14
    モデレータ

すべての返信

  • こちらのPostMessage のことでしょうか? Windows 7で仕様が変わったという記載もありませんし、そのような話も聞きませんでした。
    ちなみにWindows Vistaの時に仕様追加がありました。具体的にはUIPIの制限に引っかかるとPostMessageは動作しません。
    しかし、そのVistaでは動いていたとのことですし。

    考えられる可能性はVistaとWindows 7とで設定が異なるということです。
    つまり、試されたVistaではUIPIが無効にされていてPostMessageが動作したものの、Windows 7ではUIPIを有効にしていたために動作しなくなった、と。
    逆に言えば、UIPIを有効にしたVistaでも本当は動作していなかったのかもしれません。
    これに関してはUIPIによる問題を検証方法 に関するドキュメントがありますので、試してみるとわかります。

    「やりとりが、できません。」ではなくもっと具体的にエラーコードとか書いて欲しいです。
    2009年9月5日 22:57
  • Windows Vista(SP1)で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりは正常ですが、
    Windows 7で、VB.NET2005で開発したアプリとVB.NET2003で開発したアプリの両方向に、PostMessageでメッセージのやりとりが、できません。
    「やりとりができない」とはどういったところまで見られたのでしょうか?
    メッセージが全く飛んでこない(一方向だけ?両方向?)のか、メッセージは飛んでくるけれども wParam, lParam の値が期待したものと異なるのか、どの程度まで確認されているのでしょうか?


    ところで、Vista 環境と Win7 環境の UAC の設定の差はあるのでしょうか?
    また、Vista 環境と Win7 環境で管理者として実行する・しないの差や、デバッグ実行している・していないの差はあるのでしょうか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年9月6日 3:31
    モデレータ
  • すみません、詳しく説明いたします。

    「やりとりができない」とは、メッセージが全く飛んでこないということで、
    しかも両方向です。

    Win7 環境の UAC の設定はすべての設定で試してみましたが変りませんでした。
    Win7 環境で管理者として実行する・しないのどちらで試してみましたが、変りませんでした。

    一つ気になったのですが、
    VB.NET2005で開発したアプリとVB.NET2003で開発したアプリなので
    どちらもVB.NET2005で開発したアプリにする必要があるのでしょうか?

    2009年9月6日 17:46
  • 一つ気になったのですが、
    VB.NET2005で開発したアプリとVB.NET2003で開発したアプリなので
    どちらもVB.NET2005で開発したアプリにする必要があるのでしょうか?
    そのようなことはないはずです。
    いくつか、下記に質問を並べておきます。

    ・失敗する状況での PostMessage の戻り値は 0 なのでしょうか?
    ・戻り値が 0 である場合、GetLastError はどのような戻り値でしょうか?
    ・ウィンドウメッセージはどのような数値を送っているのでしょうか?
    ・今回の実験しているアプリ以外に、新たにテスト用に作成したアプリでも再現するのでしょうか?
    ・再現するアプリで PostMessage する箇所、WndProc で処理する箇所を抜粋することはできますか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年9月6日 22:14
    モデレータ
  • 別のテストアプリを作成したところ、問題なく、PostMessage が動作いたしました。
    それで、調べていましたら、ウインドウハンドルの値をセットし忘れていたためでした。
    よって、Windows7では、PostMessage は問題なく動作することが確認できました。
    皆様、お騒がせして申し訳ございませんでした。
    いろいろサポートしていただき、ありがとう、ございました。
    今後とも、よろしくお願いいたします。

    • 回答としてマーク V5 2009年9月9日 16:19
    • 回答としてマークされていない 高橋 春樹 2010年2月22日 1:12
    2009年9月9日 16:08