win32汇编调用win32控制台API示例

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

构建;运行如下;

并未等待用户输入;直接弹出对话框;下回再看;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值