- PR -

ウィンドウズサービスからウィンドウメッセージの取得

1
投稿者投稿内容
無限初心者
会議室デビュー日: 2006/08/17
投稿数: 3
投稿日時: 2006-08-17 13:12
はじめまして。

現在、C#でウィンドウズサービスから
ウィンドウメッセージを取得する処理を作成しております。

ウィンドウズサービスからSystem.Windows.Forms.Formを
継承したクラスを呼びWndProcでウィンドウメッセージを取得。
という処理のプログラムとしています。

自分自身のサービスからSendMessageを行った場合、
ウィンドウメッセージを取得できるのですが、

他のアプリケーションからSendMessageを行うと
正常にWndProcが機能してくれません。

他のアプリケーションから画面のないサービスに
ウィンドウメッセージを送ることは不可能なのでしょうか?

すみませんが、どなたかご教授お願いいたします。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-08-17 23:36
 Windows Service は、対話形式のウインドウを表示できないと思うのですが???

 また、Windows Vista では、より高い権限で動作しているプロセスに対して、メッセージを送ることは出来ません。API は成功しますが、Vista が握りつぶします。
 「管理者として実行する」でアプリケーションが管理者権限で実行されていると、送ることが出来ます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-08-18 10:50
引用:

他のアプリケーションからSendMessageを行うと
正常にWndProcが機能してくれません。

他のアプリケーションから画面のないサービスに
ウィンドウメッセージを送ることは不可能なのでしょうか?



標準的な構成では、Windows サービスと一般的な GUI アプリとでは、ウィンドウを作成する領域(=ウィンドウステーション)が異なります。

「明示的に領域指定をしてメッセージをやりとりする」ようなコードを書くことは可能ですが、大変面倒です。

最もイージーな解決方法は、後述のようにサービスに「デスクトップとの対話を許可」することですが、ログオン可能なユーザでのデスクトップにはことごとくウィンドウが表示されるため、脆弱性を作りこんでしまう原因になりかねません。

引用:

Windows Service は、対話形式のウインドウを表示できないと思うのですが???



サービスに「デスクトップとの対話を許可」すれば、ユーザデスクトップにウィンドウを表示することが出来ます。
無限初心者
会議室デビュー日: 2006/08/17
投稿数: 3
投稿日時: 2006-08-18 15:21
皆様、ご返信ありがとうございました。

WindowsサービスとGUIアプリとではウィンドウを作成する領域が異なる
というのは大変勉強になりました。

現状は、「デスクトップとの対話を許可」で対応したいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)