最后暂停控制台应用程序

时间:2012-07-28 08:31:37

标签: winapi assembly x86

我想知道如何在最后暂停一个控制台应用程序并按Enter键,它会以assembely结束。这是一段代码,在屏幕上显示“hello world”,但它会立即关闭。那么如何暂停程序?

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc

.data
sConsoleTitle  db "Console Application",0
sWriteText  db "Hello World",0
.code

Main PROC
    LOCAL hStdout :DWORD
    invoke SetConsoleTitleA, offset sConsoleTitle

    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov hStdout,EAX

    invoke WriteConsoleA, hStdout, offset sWriteText, 16d, 0, 0
    invoke ExitProcess, 0

Main ENDP
end Main

1 个答案:

答案 0 :(得分:0)

由于您已经使用了控制台(我看到stdoutWriteConsole),我建议您使用合适的控制台:

  • cmd.exe。可以简单地运行开始 - >运行并包含在每个现代Windows中。可以修改为使用不同的字体,调整大小等。
  • Windows PowerShell。大多数人都喜欢它。我没有。
  • Console这样的终端程序。标签,半透明和类似Linux的鼠标行为都很棒。

单击.exe运行它很棒,但如果要提供输入会发生什么?命令行参数?如果你想重定向stdin / stdout怎么办?如果你想把文件传递给它,或者把它传递给另一个程序,比如grep怎么办?如果您想以非交互方式运行程序,例如从脚本?

Windows 缺点之一是无法轻松使用控制台程序。请不要在代码中对此进行补偿,并让所有找到方法的人感到不安。

另一种选择是创建一个调用可执行文件的批处理文件,然后执行pause