include windows.inc
.data
EchoStr1 db 'Press <Q> to exit.\n\n'
EchoStr1Len=$-EchoStr1
hStdOut dd ; 标准输出句柄
char WPARAM 20h
.code
Start:
; 获得输出句柄
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hStdOut, eax
invoke EchoConsole, offset EchoStr1, EchoStr1Len
lable_WaitForKeyClick:
invoke GetKeyInput ; 等待用户按键
.if eax!='Q' && eax!='q'
.if eax==13
invoke EchoConsole, "\n", 1
else
invoke EchoConsole, "*", 1
.endif
jmp lable_WaitForKeyClick
.endif
invoke ExitProcess,0
;-------------------------------------------------------------------
; 自定义函数:获得键盘输入
; 注意:此函数只能返回 DWORD 值,因为结果是存放在 eax 寄存器里的
;-------------------------------------------------------------------
GetKeyInput proc
; 局部变量
local hStdIn :dword ; 变量:标准输入句柄
local nStdMode :dword ; 变量:控制台属性
local keycode :byte ; 变量:用户按键代码
local Tmp :dword ; 变量:临时变量
invoke GetStdHandle, STD_INPUT_HANDLE ; 获得标准输入句柄
mov hStdIn, eax ; 保存标准输入句柄
; 获得控制台属性
invoke GetConsoleMode, hStdIn, addr nStdMode
invoke GetLastError
; 设置控制台属性,使得按任意键均可返回,而不必等待回车
mov eax, ~ (ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT)
and eax, nStdMode
invoke SetConsoleMode, hStdIn, eax
; 等待用户按键,并将键值存入变量keycode
invoke ReadConsole, hStdIn, addr keycode, 1, addr Tmp, NULL
; 恢复控制台属性
invoke SetConsoleMode, hStdIn, nStdMode
; 将按键代码扩展为 DWORD类型 后返回
movzx eax, keycode
endp
;-------------------------------------------------------------------
;-------------------------------------------------------------------
; 自定义函数:输出一个字符串
; 调用示例: invoke EchoConsole, "Key", 3
; invoke EchoConsole, offset EchoStr1, EchoStr1Len
;-------------------------------------------------------------------
EchoConsole proc InputStr, StrLen
push NULL
push NULL
push StrLen
push InputStr
push hStdOut
call WriteConsole
endp
;-------------------------------------------------------------------
end Start
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5847438