- PR -

Winodowの非表示の方法について

投稿者投稿内容
Tol
常連さん
会議室デビュー日: 2004/07/16
投稿数: 27
投稿日時: 2007-04-16 15:37
VB2005でアプリケーションの作成をしているのですが、
Windowsアプリケーションで作成はするが、フォームは表示しないように
するにはどのようにすればよいのでしょうか?

本来であればコマンドアプリケーションで作成すればよいのですが、
SendMessageによるメッセージ受信を行うため、Windowを持つ必要があります。
しかしながら、特にユーザから何らかの操作をするわけではないので、
ウィンドウフォームを見せる必要はありません。

このような場合は、フォームは持つけど、非表示にしておくしかないのではと
思っているのですが、どのようにすれば実現できるのでしょうか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-16 16:04
引用:

Tolさんの書き込み (2007-04-16 15:37) より:

本来であればコマンドアプリケーションで作成すればよいのですが、
SendMessageによるメッセージ受信を行うため、Windowを持つ必要があります。
しかしながら、特にユーザから何らかの操作をするわけではないので、
ウィンドウフォームを見せる必要はありません。

このような場合は、フォームは持つけど、非表示にしておくしかないのではと
思っているのですが、どのようにすれば実現できるのでしょうか?


これっていつ開始されて、いつ終了するのでしょうか?
タスクトレイに常駐するようなつくりのものはよく見ますよね。

_________________
かるあ のメモスニペット
Tol
常連さん
会議室デビュー日: 2004/07/16
投稿数: 27
投稿日時: 2007-04-16 16:17
引用:

かるあさんの書き込み (2007-04-16 16:04) より:
これっていつ開始されて、いつ終了するのでしょうか?
タスクトレイに常駐するようなつくりのものはよく見ますよね。



イメージ的には、SendMessageを送信するアプリケーションが、
EXEファイルを直接起動し、その後SendMessageで情報をやり取りし、
最後にSendMessageで終了依頼メッセージを投げます。
それを受信することで終了となります。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-04-16 17:23
引用:

Tolさんの書き込み (2007-04-16 16:17) より:

イメージ的には、SendMessageを送信するアプリケーションが、
EXEファイルを直接起動し、その後SendMessageで情報をやり取りし、
最後にSendMessageで終了依頼メッセージを投げます。
それを受信することで終了となります。


メッセージ関連は確認するのが大変なので確認していませんが、
タスクトレイに入れる場合とそう変わらないと思います。

こんな感じか?
コード:
  Public Sub Main()
    Dim mainForm As New Form1()
    Application.Run()
  End Sub



。。。できるか不安(汗
_________________
かるあ のメモスニペット
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-16 18:00
かるあさんの方法でもいけますけど、アプリケーションの終了を自分でやらないといけないのが難点かも。
(前に深く考えずにやったときにエラー処理とDispose絡みで悩んだ覚えが・・・)
参考:どぼん!さんのとこ

手っ取り早くフォームのコンストラクタで
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
ってのはドダ?
Tol
常連さん
会議室デビュー日: 2004/07/16
投稿数: 27
投稿日時: 2007-04-16 23:02
SendMessageを送信するアプリケーションは、EXEを起動した後、
そのEXEのウィンドウハンドルを取得してメッセージを送信しています。
以下のようなコードでウィンドウハンドルを取得しています。

コード:

process = New System.Diagnostics.Process
process.StartInfo.FileName = "Test.exe"
process.Start()
System.Threading.Thread.Sleep(1000)
handle = process .MainWindowHandle



ご回答いただいた方法をためしたのですが、以下の問題が発生してしまいました。

引用:

コード:

Public Sub Main()
Dim mainForm As New Form1()
Application.Run()
End Sub





上記の方法だと、ウィンドウハンドルの取得ができないみたいです。
また、

引用:

手っ取り早くフォームのコンストラクタで
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
ってのはドダ?



この場合も、ShowInTaskbarをfalseとするとメインウィドウハンドルが取得できません。
メインウィンドウハンドルを取得でき、かつフォームを非表示にしたいのですが、
メインウィドウハンドルを取得の方法が間違っているのでしょうか?


[ メッセージ編集済み 編集者: Tol 編集日時 2007-04-17 14:46 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-17 07:40
質問!
表示されていないものを、どうやって捕捉するのですか?
あるいは、見えないものをどうやって観察するのですか?
あるいは、無いものを、どうやって取得するのですか?

SendMessage じゃなきゃダメなの?そこから見直した方がいいんじゃない?
_________________
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-17 11:20
Tolさんごめんなさい。Sendmessageって見えてないフォームは受け取れないのか。
フォームを隠す方だけに注力してしまった。m(_ _)m

Jittaさん
>SendMessage じゃなきゃダメなの?そこから見直した方がいいんじゃない?
スレ主でもないのに質問して申し訳ないですけど、非表示の常駐プロセスへの送信って普通どうやるんでしょうか?(MQとか?)

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