- - PR -
ウィンドウズサービスからウィンドウメッセージの取得
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-17 13:12
はじめまして。
現在、C#でウィンドウズサービスから ウィンドウメッセージを取得する処理を作成しております。 ウィンドウズサービスからSystem.Windows.Forms.Formを 継承したクラスを呼びWndProcでウィンドウメッセージを取得。 という処理のプログラムとしています。 自分自身のサービスからSendMessageを行った場合、 ウィンドウメッセージを取得できるのですが、 他のアプリケーションからSendMessageを行うと 正常にWndProcが機能してくれません。 他のアプリケーションから画面のないサービスに ウィンドウメッセージを送ることは不可能なのでしょうか? すみませんが、どなたかご教授お願いいたします。 | ||||||||
|
投稿日時: 2006-08-17 23:36
Windows Service は、対話形式のウインドウを表示できないと思うのですが???
また、Windows Vista では、より高い権限で動作しているプロセスに対して、メッセージを送ることは出来ません。API は成功しますが、Vista が握りつぶします。 「管理者として実行する」でアプリケーションが管理者権限で実行されていると、送ることが出来ます。 | ||||||||
|
投稿日時: 2006-08-18 10:50
標準的な構成では、Windows サービスと一般的な GUI アプリとでは、ウィンドウを作成する領域(=ウィンドウステーション)が異なります。 「明示的に領域指定をしてメッセージをやりとりする」ようなコードを書くことは可能ですが、大変面倒です。 最もイージーな解決方法は、後述のようにサービスに「デスクトップとの対話を許可」することですが、ログオン可能なユーザでのデスクトップにはことごとくウィンドウが表示されるため、脆弱性を作りこんでしまう原因になりかねません。
サービスに「デスクトップとの対話を許可」すれば、ユーザデスクトップにウィンドウを表示することが出来ます。 | ||||||||
|
投稿日時: 2006-08-18 15:21
皆様、ご返信ありがとうございました。
WindowsサービスとGUIアプリとではウィンドウを作成する領域が異なる というのは大変勉強になりました。 現状は、「デスクトップとの対話を許可」で対応したいと思います。 |
1