DOBON.NET DOBON.NETプログラミング掲示板過去ログ

.NETでのWindowメッセージ通信

環境/言語:[OS : Windows 2000 Professional / 言語 : C# / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

初めて質問させていただきます。

C++で作成したプログラムをC#(VS.NET使用)で書き直すことになりました。
このプログラムはWM_COPYDATAのWindowsメッセージ使ってプロセス間通信を行うのですが、以下の条件があります。

・ウィンドウは常に非表示(タスクトレイアイコンも含めて非表示)
  メッセージ送受信だけを行うウィンドウであるため
・自ウィンドウハンドルにアクセスできること
  接続相手に自ウィンドウハンドルを送信する必要があるため

自分なりに、Formクラス、NativeWindowクラス(MSDNのNativeWindowクラス
に関するページに掲載されていたサンプルを見ながら)を使ったりしながら
作成してみましたが、メッセージポンプ作成のためにApplication.Run(Form)
を実施すると、どうしてもウィンドウが表示されてしまいます。
Formクラス指定なしのApplication.Run()だと、ウィンドウハンドルに
アクセスできないようですし・・・。

何とか.NETクラスライブラリで実現したいと思っているのですが、このような仕様だとWin32 API(RegisterClass, CreateWindow等)を使用しないと
無理なのでしょうか?

よろしくお願いします。

【解決するために何をしたか】

・NativeWindowクラスのサンプル
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsnativewindowclasstopic.asp
じゃんぬねっと です。

■No8612に返信(初心者ぱんださんの記事)
> 自分なりに、Formクラス、NativeWindowクラス(MSDNのNativeWindowクラス
> に関するページに掲載されていたサンプルを見ながら)を使ったりしながら
> 作成してみましたが、メッセージポンプ作成のためにApplication.Run(Form)
> を実施すると、どうしてもウィンドウが表示されてしまいます。
> Formクラス指定なしのApplication.Run()だと、ウィンドウハンドルに
> アクセスできないようですし・・・。

Handle の取得と非表示に関しては問題ないと思います。
C# だったら、難しく考えなくてもできそうな気が...
http://dobon.net/vb/dotnet/form/hideformwithtrayicon.html

# メッセージ送信については別問題ですが...
じゃんぬねっとさん、ありがとうございます。

■No8616に返信(じゃんぬねっとさんの記事)
> Handle の取得と非表示に関しては問題ないと思います。
> C# だったら、難しく考えなくてもできそうな気が...
> http://dobon.net/vb/dotnet/form/hideformwithtrayicon.html

この記事を参考にして作成してみたら、今までの苦労は何だったので
しょうか、というくらい見事に成功しました。
タスクトレイにも表示したくなかったので、この記事は見てませんでした。
大変失礼しました。

> # メッセージ送信については別問題ですが...

こちらはWin32API のSendMessageを使ってます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板