2.asm;
.386
.model flat, stdcall
option casemap :none
include S:\masm32\include\windows.inc
include S:\masm32\include\user32.inc
include S:\masm32\include\kernel32.inc
include S:\masm32\include\gdi32.inc
includelib S:\masm32\lib\user32.lib
includelib S:\masm32\lib\kernel32.lib
includelib S:\masm32\lib\gdi32.lib
.data
buffer BYTE 80 DUP(?),0,0
stdInHandle HANDLE ?
bytesRead DWORD ?
.const
szCaption db '获取信息',0
.code
start:
INVOKE GetStdHandle, STD_INPUT_HANDLE
mov stdInHandle,eax
INVOKE ReadConsole, stdInHandle, ADDR buffer,80, ADDR bytesRead, 0
invoke MessageBox,NULL,addr buffer,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
函数 ReadConsole 为读取文本输入并将其送入缓冲区提供了方法;原型:
ReadConsole
hConsoleInput: HANDLE ;输入句柄
lpBuffer:PTR BYTE, ;缓冲区指针
nNumberOfCharsToRead:DWORD, ;读取的字符数
lpNumberOfCharsRead:PTR DWORD, ;指向读取字节数的指针
lpReserved:DWORD ;未使用
hConsoleInput 是函数 GetStdHandle 返回的可用控制台输入句柄。参数 lpBuffer 是字符数组的偏移量。nNumberOfCharsToRead 是一个 32 位整数,指明读取的最大字符数。lpNumberOfCharsRead 是一个允许函数填充的双字指针,当函数返回时,字符数的计数值将被放入缓冲区。最后一个参数未使用,传0。
要读取用户输入的字符,先调用 GetStdHandle 来获得控制台标准输入句柄,再使用该句柄调用 ReadConsole;
获取标准输入句柄:
INVOKE GetStdHandle, STD_INPUT_HANDLE
mov stdInHandle,eax
等待用户输入:
INVOKE ReadConsole, stdInHandle, ADDR buffer,80, ADDR bytesRead, 0
构建;运行如下;
并未等待用户输入;直接弹出对话框;下回再看;