• ベストアンサー

VB.NETのコンソールアプリケーションについて

現在「Microsoft Visual Basic 2005 Express Edition」でコンソールアプリケーションを作りました。 でも、最終的に動かしてみて、コンソール画面が実行のたびに表示されて、目がチカチカしてしまいます。 これをなくす為に画面の最小化実行をしたいと思い、色々調べてみたのですが方法が解りませんでした。 そもそも、最小化した状態で実行は可能なのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.4

>どのようにVB.NETに置き換えたらよいのかを、是非お教えいただけませんでしょうか。 ということは、アンマネージはお勧めしないと言いましたが、 アンマネージを使ってでも何とかしたいということで 宜しいですか? それであれば、SharpDevelop というソフトで、C#⇔VB.NET変換ができます。 http://www.forest.impress.co.jp/lib/stdy/program/progeditor/sharpdevelop.html 私も愛用していて、結構便利です。 ただし、言語間の壁は結構厚くて、SharpDeveloperで、 VB.NETにコードを変換しても、一部についてはサポートしてくれない 箇所もある(例えばDllImport等)と思いますので、 その部分は、MSDNで1つ1つ調べながら、C#とVB.NETでの 表記の違いを調べていくしかないと思います。 例えば、 C# [DllImport("kernel32.dll")] static extern uint WaitForSingleObject( IntPtr hHandle, uint dwMilliseconds ); VB.NET Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Integer, ByVal dwMilliseconds As Integer) As Integer といった感じに置き換える必要があります。 言語間の壁は簡単に打ち破れませんので、方法としては ・SharpDeveloperを入手して、VB.NETにConvert(変換)する ・SharpDeveloperで変換しきれなかった箇所を  MSDNやGoogleなどで調べながら1つずつ直す しかないと思います。 C#もVB.NETも表現が違うだけで、考え方は同じですので、 そんなに難しくありません。 ご参考になれば幸いです。

tomiono1
質問者

お礼

こんな便利なものがあったのですか。 早速、頑張ってみたいと思います。 >アンマネージはお勧めしないと言いましたが どうしても、画面を表示したくないのでチャレンジしてみることにしました。 注告をしていただいたのに申し訳ありません。 長い間にわたって教えていただきありがとうございました。 また色々と質問させていただくかもしれませんがその時はよろしくお願い致します。

その他の回答 (3)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

>でも、ウィンドウが表示されてしまうのは仕方ないのでしょうか? >(起動後、DOS窓表示→最小化になるのですが) アンマネージのコードを使えばできますね。 http://www.codeproject.com/cs/threads/SingleInstance.asp (コードを書くと長いので、参考URLを記載させて頂きます。) (なお、誠に申し訳ないのですが、サンプルコードは、C#なので、 VB.NETに展開しなおす必要があります) ただし、アンマネージ(Win32用のAPI)を使うというのは、 .NETで開発する上では、ナンセンスなので、 お勧めしかねるところではあります。 後は、作成したEXEを最小化できるDOSの*.batファイルを作れば できます(startコマンド)。 しかし、startコマンドでやらせた場合においても、 昔の16ビットの名残として残っているものであるため、 32ビット、64ビット時代の現在においてもあまりお勧めは できません。 START [オプション] プログラム名 [引き数...] DOS窓で、start /? とやるとstartコマンドの使い方が載っています。 なので、結論からいうと、将来性のバージョンのWindowsで 動かなくなってもいいというのであれば、 初めから最小化した状態でも起動はできます。 しかし、独自で作ったWindowsアプリならわかりますが、 DOS窓は、OS側が管理しているWindowですので、 あまり、これ以上はコアなことは、やらせない方ができれば望ましいというのが 回答です。 もし、http://www.codeproject.com/cs/threads/SingleInstance.asp に書いてあるサンプルを使って、どうしても最小化したいけど、 C#がわからないとか、VB.NETにどう置き換えたらいいのか わからない等ありましたら、別途ご質問下さい。

tomiono1
質問者

補足

ご返事ありがとうございます。 数日間上記の方法を試そうと色々やってみたのですが、APIとC言語が初のもので再度質問させていただきたいと思います。 どのようにVB.NETに置き換えたらよいのかを、是非お教えいただけませんでしょうか。 お忙しいと思いますがよろしくお願いいたします。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

あ、それから、下記のコードを動かすには、 ConsoleApplicationに、 System.Windows.Formsへの 参照設定をしてから、下記のコードを参考にご利用下さい。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

こんなので如何でしょう?   Sub Main()     ' プロセスを取得     Dim p As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess     ' Windowハンドルを取得     Dim handle As IntPtr = p.MainWindowHandle()     ' DOS窓の最小化設定     Dim minsize As Int32 = &HF020     Dim syscommand As IntPtr = &H112     ' 最小化実行     If handle Then       Dim winMessage As System.Windows.Forms.Message       winMessage = System.Windows.Forms.Message.Create(handle, syscommand, minsize, 0)       Dim nativeWindow As New System.Windows.Forms.NativeWindow()       nativeWindow.DefWndProc(winMessage)       nativeWindow = Nothing     End If     ' ご自身がやりたい処理へ     While (True)       System.Threading.Thread.Sleep(1000)       Console.WriteLine("Hello World")     End While   End Sub

tomiono1
質問者

補足

ご返事が遅くなり申し訳ありませんでした。 早速ためさせていただきました。 無事最小化できました!! でも、ウィンドウが表示されてしまうのは仕方ないのでしょうか? (起動後、DOS窓表示→最小化になるのですが) これを起動時に最小化された状態。(DOS窓非表示) みたいな感じななことができればベストなのですが… 画面の下のタスクバーに表示されるのは気にしません。 ご返事が遅くなったのに再度お聞きして申し訳ありませんがよろしくお願いいたします。

関連するQ&A