如何在VB 8.0中创建MS-DOS程序?

时间:2011-06-20 16:26:27

标签: vb.net command-line-interface executable dos 16-bit

您可以使用Mirosoft Visual Basic 2008 Express Edition制作MS-DOS程序吗?我想制作一个没有命令提示符,DOSBOX或任何正在使用的窗口的窗口。我试图创建一个消息框,但它不会像在MS-DOS中一样!我对VB不太了解,但我需要把所有东西留在DOSBOX上。以下是不会留在CLI中的模板:

Imports System.Windows.Forms

    Public Class Dialog1

    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As        System.EventArgs) Handles OK_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub

    Private Sub Dialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

如果我能获得模板或某种类型的代码,我将非常感激。

5 个答案:

答案 0 :(得分:2)

过去15年(或更多......)中没有Microsoft编译器会针对16位系统(这就是DOS)。为DOS编译的最后一个VB版本是VB 1.0,但是再好不过了。

如果你不介意沿着C ++路线走,你可以看看DJGPP。还有可以为DOS编译的Pascal和汇编程序编译器。

随意重新思考你的道路:)

答案 1 :(得分:1)

您可以创建一个保留在控制台窗口内的VB.Net应用程序。

您需要做的就是不要调用任何不在控制台窗口内的功能(例如MessageBox)。

与所有其他.Net应用程序一样,它需要运行Windows和正确版本的.Net Framework。

答案 2 :(得分:1)

你的意思是运行Windows XP / Vista / 7的现代计算机上的控制台窗口(即带有看起来像DOS命令提示符的黑盒子)或实际DOS 即运行MS的计算机-DOS 5.22或类似的东西?

如果您指的是前者 - 控制台窗口 - 您只需在Visual Basic中将项目创建为控制台应用程序。 (按“新建项目”后立即选择。)代码中的第一行表明它是一个Windows窗体应用程序,用于创建对话框和窗口等。

在Google / Youtube上查看“视觉基本控制台应用程序”,您应该可以顺利完成。

答案 3 :(得分:1)

我知道这是一个老问题,也许这次OP讨论的MS-DOS盒子现在在博物馆中,但如果您选择的语言是Visual Basic,那么我建议您尝试使用PowerBasic(仍然可用的,商业的,可以编译成16位代码)或QBasic(无论如何已经在您的DOS盒子上可用。

PowerBasic, recent versions编译成32位的情况下。但我相信你可以问他们旧版本。好处是你可以使用单个代码库来实现16位和32位。我使用它已经有一段时间了,但是如果我没记错的话,它可以为控制台视图创建对话框窗口(即,不会弹出消息框,而是在MS-DOS控制台中)。

QBasic的情况下,它是一个相当有限的环境并且它被解释,尽管其编译的商业伴侣QuickBasic现在可以从几个站点免费下载。此外,似乎存在可以编译为32位和64位的新版本,这意味着您可以保持(种类)相同的代码库。

我确定还有其他选择,但如果您已经有使用Visual Basic的经验,这些可能是最简单的。

顺便说一下,正如其他人已经指出的那样,Windows Forms无法使用或编译成16位MS-DOS。

答案 4 :(得分:-1)

为此添加三个文本框

1)txterror(从命令提示符或DOS获取错误)

2)txtresult(从命令提示符或DOS获取结果)

3)txtcommand(写入要执行的DOS命令)

在表单加载

中写下面的代码
' Set start information.
    Dim start_info As New ProcessStartInfo("cmd")
    start_info.UseShellExecute = False
    start_info.CreateNoWindow = True
    start_info.RedirectStandardOutput = True
    start_info.RedirectStandardError = True
    start_info.RedirectStandardInput = True

    ' Make the process and set its start information.
    Dim proc As New Process()
    proc.StartInfo = start_info

    ' Start the process.
    proc.Start()

    ' Attach to stdout and stderr.
    Dim std_out As StreamReader = proc.StandardOutput()
    Dim SW As System.IO.StreamWriter = proc.StandardInput
    Dim std_err As StreamReader = proc.StandardError()
    SW.WriteLine(txtcommand.Text)
    SW.WriteLine("exit")
    ' Display the results.
    txtresult.Text = std_out.ReadToEnd()

    ' Clean up.
    std_out.Close()
    std_err.Close()
    proc.Close()

在textbox keydown事件中写下面的代码(即txtcommand_KeyDown)

If e.KeyCode = Keys.Enter Then
        txterror.Text = ""
        ' Set start information.
        Dim start_info As New ProcessStartInfo("cmd")
        start_info.UseShellExecute = False
        start_info.CreateNoWindow = True
        start_info.RedirectStandardOutput = True
        start_info.RedirectStandardError = True
        start_info.RedirectStandardInput = True

        ' Make the process and set its start information.
        Dim proc As New Process()
        proc.StartInfo = start_info

        ' Start the process.
        proc.Start()

        ' Attach to stdout and stderr.
        Dim std_out As StreamReader = proc.StandardOutput
        Dim SW As System.IO.StreamWriter = proc.StandardInput
        Dim std_err As StreamReader = proc.StandardError()
        SW.WriteLine(txtcommand.Text)
        SW.WriteLine("exit")

        ' Display the results.
        txtresult.Text = std_out.ReadToEnd()
        txterror.Text = std_err.ReadToEnd()

        std_err.Dispose()
        SW.Close()
        ' Clean up.
        std_out.Close()
        std_err.Close()
        proc.Close()
    End If