dポイントプレゼントキャンペーン実施中!

現在「Microsoft Visual Basic 2005 Express Edition」でコンソールアプリケーションを作りました。

でも、最終的に動かしてみて、コンソール画面が実行のたびに表示されて、目がチカチカしてしまいます。
これをなくす為に画面の最小化実行をしたいと思い、色々調べてみたのですが方法が解りませんでした。
そもそも、最小化した状態で実行は可能なのでしょうか?

よろしくお願いします。

A 回答 (4件)

>どのようにVB.NETに置き換えたらよいのかを、是非お教えいただけませんでしょうか。



ということは、アンマネージはお勧めしないと言いましたが、
アンマネージを使ってでも何とかしたいということで
宜しいですか?

それであれば、SharpDevelop というソフトで、C#⇔VB.NET変換ができます。
http://www.forest.impress.co.jp/lib/stdy/program …

私も愛用していて、結構便利です。

ただし、言語間の壁は結構厚くて、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も表現が違うだけで、考え方は同じですので、
そんなに難しくありません。

ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

こんな便利なものがあったのですか。
早速、頑張ってみたいと思います。

>アンマネージはお勧めしないと言いましたが
どうしても、画面を表示したくないのでチャレンジしてみることにしました。
注告をしていただいたのに申し訳ありません。

長い間にわたって教えていただきありがとうございました。
また色々と質問させていただくかもしれませんがその時はよろしくお願い致します。

お礼日時:2007/08/24 09:27

>でも、ウィンドウが表示されてしまうのは仕方ないのでしょうか?


>(起動後、DOS窓表示→最小化になるのですが)

アンマネージのコードを使えばできますね。

http://www.codeproject.com/cs/threads/SingleInst …

(コードを書くと長いので、参考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/SingleInst …
に書いてあるサンプルを使って、どうしても最小化したいけど、
C#がわからないとか、VB.NETにどう置き換えたらいいのか
わからない等ありましたら、別途ご質問下さい。

この回答への補足

ご返事ありがとうございます。
数日間上記の方法を試そうと色々やってみたのですが、APIとC言語が初のもので再度質問させていただきたいと思います。

どのようにVB.NETに置き換えたらよいのかを、是非お教えいただけませんでしょうか。
お忙しいと思いますがよろしくお願いいたします。

補足日時:2007/08/23 09:20
    • good
    • 0

あ、それから、下記のコードを動かすには、


ConsoleApplicationに、 System.Windows.Formsへの
参照設定をしてから、下記のコードを参考にご利用下さい。
    • good
    • 0

こんなので如何でしょう?



  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

この回答への補足

ご返事が遅くなり申し訳ありませんでした。
早速ためさせていただきました。

無事最小化できました!!
でも、ウィンドウが表示されてしまうのは仕方ないのでしょうか?
(起動後、DOS窓表示→最小化になるのですが)

これを起動時に最小化された状態。(DOS窓非表示)
みたいな感じななことができればベストなのですが…
画面の下のタスクバーに表示されるのは気にしません。

ご返事が遅くなったのに再度お聞きして申し訳ありませんがよろしくお願いいたします。

補足日時:2007/08/20 09:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!