vb控制台怎么输出,注意是控制台,不是print和msgbox

vb控制台怎么输出,注意是控制台,不是print和msgbox,第1张

注:以下核心代码来自:https://tieba.baidu.com/p/2561344540?red_tag=1334161657 。

废话不多说,三步最简实现VB6输出到控制台显示

第一步,定义API及全局变量等:

'添加模块,取名 DOSConsole.bas ,写入以下代码

Option Explicit

'---------定义所需API

Public Declare Function FreeConsole Lib "kernel32" () As Long

Public Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long

Public Declare Function LstrLen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long

Public Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, ByVal lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long

'-------------常量定义

Public Const STD_OUTPUT_HANDLE = -11&

'-----------定义全局变量

Public hConsoleOut As Long ' The console's output handle

'---------定义函数

Public Sub Initialize() '---初始化获取句柄

  '获得控制窗口的句柄

  hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)

End Sub

Public Sub Terminate() '-----销毁句柄

  FreeConsole ' Destroy the console

End Sub

Public Sub COut(szOut As String)   '------文字输出到控制台函数

  WriteConsole hConsoleOut, szOut, LstrLen(szOut), vbNull, vbNull

End Sub

第二步,使用方法:

'在 sub main() 或 Sub Form_Load() 内先 执行初始化函数:Initialize

'在 sub main() 尾部 或 Sub Form_QueryUnload 中执行销毁函数:Terminate

'在 sub main() 中部 或 Sub Command1_Click() 中执行输出函数:Call COut("VB6 控制台" &vbCrLf)

'示例1,无窗体模式:

Public Sub Main()

Call Initialize

'----------此处程序显示代码开始-------------

Call COut("VB6 控制台" &vbCrLf)

'----------程序代码到此结束-------------

Call Terminate

end

End Sub

'示例2,窗体模式:

Private Sub Form_Load()

Call Initialize

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

  Call Terminate

End Sub

Private Sub Command1_Click()

Call COut("VB6 控制台" &vbCrLf)

End Sub

'示例3,窗体混合模式:

'模块1:

Public Sub Main()

Call Initialize

Call COut("VB6 控制台" &vbCrLf)

  Load Form1

  Form1.Show

End Sub

'窗体模块:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

  Call Terminate

End Sub

Private Sub Command1_Click()

Call COut("VB6 控制台" &vbCrLf)

End Sub

完成以上步骤后,执行是没有效果的,需要进行下面的第三步,这才是关键部分。

第三步,修改编译后的EXE:

以上代码编译后的exe文件还不能实现CMD控制台模式输出,需要对exe文件进行修改才行,有两种修改方法。

方法一,直接使用二进制编辑器或自己写另一个代码修改:

用二进制修改指定偏移量位置处的数字,注意以下所说文件起点偏移量为1,而大多数二进制编辑器起点计为0,使用时需要注意

P-代码 方式编译的exe其偏移量是 &H10D,编译为 本机代码 的偏移量是 &H115 , 将该位置的 02 改为 03 即可。

以 本机代码 方式编译的exe修改为例,还可用以下另一个代码进行修改:

新建一个VB工程,运行以下代码

Sub Main()

Open "{这里填写编译出的文件的路径}" For Binary As #1

Seek #1, &H115

Put #1, , CLng(3)

Close #1

End Sub

方法二,用VBS代码重新连接第二步编译好的exe文件:

方法来自: http://vb.mvps.org/samples/Console/

新建VBS文件(LinkConsole.vbs),内容如下(保存关闭):

' LinkConsole.vbs

' http://www.angelfire.com/mi4/bvo/vb/vbconio.htm

'

' This is a WSH script used to make it easier to edit

' a compiled VB6 EXE using LINK.EXE to create a console

' mode program.

'

' Drag the EXE's icon onto the icon for this file (or onto

' a shortcut to this file), or execute it from a command

' prompt as in:

'

'    LinkConsole.vbs Project1.exe

'

Option Explicit

Dim strLINK, strEXE, WSHShell

' Be sure to set up strLINK to match your VB6 installation.

strLINK = """C:\Program Files\Microsoft Visual Studio\VB98\LINK.EXE"""

strEXE = """" &WScript.Arguments(0) &""""

Set WSHShell = CreateObject("WScript.Shell")

WSHShell.Run strLINK &" /EDIT /SUBSYSTEM:CONSOLE " &strEXE

Set WSHShell = Nothing

WScript.Echo "Complete!"

VBS使用方法:将第二步中编译好的exe文件按鼠标左键拖放到以上新建的 LinkConsole.vbs 文件图标上,即会执行 LINK.EXE 重编译exe为控制台模式,注意你自己的 VB6 的安装位置,以上 VBS 文件中为使用默认路径安装(C:\Program Files\Microsoft Visual Studio\VB98\)的。

至此,直接运行你用以上方法处理完成的 exe 文件就会出现控制台窗口,并显示设定内容:

也可以编写批处理文件,内容如:

VB6Console.exe

pause

然后执行改批处理文件,即可在 CMD 窗口中实现输出设定内容:

后记:以上核心函数为 GetStdHandle 和 WriteConsole 这两个。

在VB(6)中写控制台程序是非常复杂且没有意义的事

一个最简单的控制台演示程序:

Option

Explicit

Private

Declare

Function

AllocConsole

Lib

"kernel32"

()

As

Long

Private

Declare

Function

GetStdHandle

Lib

"kernel32"

(ByVal

nStdHandle

As

Long)

As

Long

Private

Declare

Function

WriteConsole

Lib

"kernel32"

Alias

"WriteConsoleA"

(ByVal

hConsoleOutput

As

Long,

ByVal

lpBuffer

As

Any,

ByVal

nNumberOfCharsToWrite

As

Long,

lpNumberOfCharsWritten

As

Long,

lpReserved

As

Any)

As

Long

Private

hOut

As

Long

'The

console's

output

handle

Private

Const

STD_OUTPUT_HANDLE

=

-11&

Private

Sub

Main()

Dim

szOut

As

String

AllocConsole

hOut

=

GetStdHandle(STD_OUTPUT_HANDLE)

szOut

=

"hello

World"

WriteConsole

hOut,

szOut,

Len(szOut),

vbNull,

vbNull

End

Sub

你要新建工程,删除form,添加模块才能运行

而这个很容易用其它软件实现(同样的VBS,或VB.NET可方便用于控制台编程的,更不用说其它语言了)

所以,没有人做这种无用功的,你找不到也正常

当然,有老外的好事者专门做了个模块的,你可以到Stack

Overflow上看下。

VB6.0编写的程序在win7或win8上可以用。

vb6.0是微软公司为业余编程爱好者开发的可视化编程平台。

Visual Basic 6.0 Sirk 整体介绍

====================================

1、只有13m大!保留企业版常用功能,随带随走,支持 XP Vista win7 win8 适合各类VB程序员

2、保留企业版所有控件,完整版有的,迷你版全有,正常打开所有VB工程,非其它过度精简版,而出现打不开文件、工程加载失败等问题

3、保留资源编辑器,类生成器,ADO数据访问,ADO数据环境,数据报表,方便创建数据库应用程序

4、支持鼠标滚轮,方便代码编辑

5、支持创建真正的 控制台应用程序 Console exe,除此之外支持 标准EXE、ActiveX EXE、Active DLL、ActiveX 控件、IDE 插件 等工程类型

6、添加vsFlexGrid系列表格控件,数据呈现更方便

7、添加vbRichClient库,支持多线程,com dll免注册,高速2d绘图,物理引擎,sqlite数据库,有序字典,数组列表,高级集合,常见加密解密,压缩解压缩,socket,简单下载,web服务,xml sax dom,各种工具类……vb不再弱小

8、添加 apiviewer 2004 api 查看器

9、添加 dbgview 调试信息查看器

10、添加 spyxx 窗口分析器

11、添加 enigma virtualbox,可以对VB程序以单文件方式打包,对 ocx dll 免注册,去除依赖,免安装,实现vb程序绿化

12、完善的安装程序,各模块和工具均可自由选择安装


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11859142.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存