2012-07-28 176 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