0

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() を試します。

4

1 に答える 1