2012-07-28 47 views
0

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

.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 

回答

0

既然你已经有一个控制台的工作(我看到stdoutWriteConsole)我会建议你用正确的控制台工作:

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

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

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

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

+0

ReadConsole有什么问题? – 2012-07-28 21:51:36

+0

你的意思除了我写的关于暂停用户非输入?没什么,我猜。虽然,这是什么意思? “如果使用已重定向为控制台句柄以外的标准句柄,则ReadConsole失败。” – aib 2012-07-29 03:19:20

+0

要评论你的答案,'cmd'和'Powershell'都使用相同的Windows控制台主机,所以它们没有任何不同的功能(字体,大小调整...),但是'Powershell'当然是不同的贝壳。 – SpellingD 2012-07-30 15:13:17