• 締切済み

WindowsサービスでPostmessage

Windowsサービスアプリケーションで普通にCreateWindow APIを使用してウィンドウを作成し、このウィンドウに対して同じアプリケーション内からPostMessageするとメッセージが送られません。PostMessage関数自体は戻り値から判断すると正常に完了しているように思われます。(戻り値は1) ウィンドウ生成は下記のように行っています。 CreateWindow("SERVICE_WINDOW", "", WS_POPUP,0 , 0, 0, 0, NULL, NULL, 0, NULL); Windowsサービスではなく通常のアプリケーションとして起動した場合は普通にPostMessage出来ています。 ちなみにサービスのプロパティで「デスクトップとの対話を許可する」にチェックを入れても変わりませんでした。 また、サービスを実行するアカウントをAdministrator権限のあるユーザーに変えても同じでした。 原因と対処法分かりますでしょうか? これが出来ない場合、別の方法による代替手段はありますでしょうか? 実行環境はWindows XPです。

みんなの回答

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.1

同じような事をやった経験が無いので、制限事項の有無が判りませんが、思い付くまま回答しますと、 CreateWindow に属するスレッドキューが何か怪しそうですね。 1つ試すならば Post ではなく Send で送って、問題のイベントハンドラが反応するかどうかですね。 もう1つは別のアプリ(プロセス)から Post してみて、それでも反応しなければウィンドウのメッセージループの作りがおかしいんじゃないでしょうか? サービスとウィンドウのメッセージループとの関係(作り)が判らないので、切り口としてはこれ位でしょうか...

katorea21
質問者

お礼

ご回答ありがとうございます。 >1つ試すならば Post ではなく Send で送って、問題のイベントハンドラが反応するかどうかですね。 SendMessageは送信先の処理が完了するまで制御が戻ってきません。これでは意味がないのです。 >もう1つは別のアプリ(プロセス)から Post してみて、それでも反応しなければウィンドウのメッセージループの作りがおかしいんじゃないでしょうか? 同じ作りのアプリを、サービスではなく普通のアプリケーションとして実行すれば、普通にPostMessage出来ていますので、作りがおかしいとも思えないのですが。至って普通のメッセージループしか行っていません。 >CreateWindow に属するスレッドキューが何か怪しそうですね。 これは具体的にどこをどう調べれば良いのでしょうか?

関連するQ&A