我发现可以使用 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”的方法,但这显然不是一个好的解决方案。
如果我从 CMD 窗口启动示例程序: c:\mydir>myprogram.exe getkey|more 那么控制台的行为比没有开关“更多”更“自然”。
1) 但是,如果我使用 c:\mydir>myprogram.exe getkey: 启动一个程序:VBNET 是否可以在执行之前将关键字“|more”添加到命令行参数“getkey”,以便程序将执行“getkey|more”只有“getkey”?
2) 像示例中所示的那样,在表单的 _Load 处理程序中仅使用命令“End”来终止 GUI 程序是否可以接受?我尝试 Application.Exit() 和 Me.Close() 程序表现不佳的地方。