CMD ウィンドウを使用して、典型的な NET GUI アプリケーションを起動できることがわかりました。
しかし、いくつかの問題があり、それほどきれいではありません。
これが私のコード例です:
Public Class main_form
Private Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
Private Declare Function FreeConsole Lib "kernel32.dll" () As Boolean
Dim mykey As String = "A01F-FFB4-0402"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If My.Application.CommandLineArgs.Count > 0 Then
If AttachConsole(-1) Then
Dim kill_Me As Boolean = False
Dim cArgs() As String = GetCommandLineArgs()
For c As Integer = 0 To cArgs.Length - 1
cArgs(c) = cArgs(c).ToLower()
If cArgs(c) = "getkey" Then
Console.WriteLine(mykey)
kill_Me = True
End If
Next
FreeConsole()
If kill_Me Then End
If (MessageBox.Show( _
"Asked command not present." & NewLine & "Start program with GUI normally?", "", _
MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = _
DialogResult.Cancel) _
Then End
End If
End If
セキュリティの問題は無視してください。これは単なる例です。ここの人々のように、問題はコンソールの終了にあると結論付けています。キー「ENTER」を送信するアプローチがありますが、これは明らかに良い解決策ではありません。
c:\mydir>myprogram.exe getkey|more を使用して CMD ウィンドウからサンプル プログラムを起動すると、コンソールはスイッチ「more」を使用しない場合よりも「自然」に動作します。
1) しかし、c:\mydir>myprogram.exe getkey でプログラムを開始した場合: VBNET でキーワード「|more」を実行前にコマンドライン引数「getkey」に追加して、プログラムが代わりに「getkey|more」を実行することは可能ですか? 「getkey」だけの?
2) 例に示されているように、フォームの _Load ハンドラーでコマンド「End」だけで GUI プログラムを終了することは許容されますか? プログラムがうまく動作しない Application.Exit() と Me.Close() を試します。