【问题标题】:I want to change the output with two buttons of YES and NO in message box [closed]我想在消息框中使用 YES 和 NO 两个按钮更改输出[关闭]
【发布时间】:2018-06-16 21:38:17
【问题描述】:

这是汇编程序的代码,它显示输出消息框“Hello world”以及“OK”按钮。我需要的是使用消息框获取输出,并有两个带有“是”和“否”的按钮,当我们单击“否”按钮时它应该终止

extrn MessageBoxA : proc
extrn ExitProcess : proc
extern SetConsoleTitleA : proc
extern WriteConsoleA : proc
extrn GetStdHandle : proc

STD_OUTPUT_HANDLE = -11 

.data
handle dq ?
MsBoxCaption db "Sample dialogbox header",0; 
MsBoxText db "Hello world",0;
ConsoleText db "Hello, world!", 0;
ConsoleTextLen = $-ConsoleText;
Text db "This is title",0;
NumCharsWritten dw ?

.code

main proc 
sub rsp, 28h

mov ecx, STD_OUTPUT_HANDLE
call GetStdHandle
mov [handle], rax 

lea rcx,Text
call SetConsoleTitleA

xor r9d,r9d
lea r8, MsBoxCaption;
lea rdx, MsBoxText;
xor ecx,ecx
call MessageBoxA

mov rcx, [handle]
lea rdx, ConsoleText
mov r8d, ConsoleTextLen
mov r9w, NumCharsWritten
call WriteConsoleA

mov rcx, 0;
call ExitProcess

add rsp,28h
main endp

end

【问题讨论】:

  • 您知道您需要调用哪些 WinAPI 函数来实现这一目标吗?可能与 MessageBoxA 不同的参数。在 C 或 C++ 中计算出来,然后在 asm 中进行。

标签: winapi assembly messagebox


【解决方案1】:

首先,正如彼得所说,在问这样一个简单的问题之前,您应该在MSDN 上查阅MessageBox() 的文档,这样您就不会被否决,但我认为您想改变:

xor r9d,r9d

到:

mov r9d, MB_YESNO        ; = 4

然后将eax 中返回的值与 IDNO (= 7) 进行比较。

这足以让你继续前进吗?

【讨论】:

  • 谢谢你,先生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
相关资源
最近更新 更多