【问题标题】:MessageBox if no internet connection is established如果没有建立 Internet 连接,则 MessageBox
【发布时间】:2013-02-25 23:04:20
【问题描述】:

我正在检查 Internet 连接状态,如果没有 Internet 连接,我想发送一个 MessageBox 我拥有的是这样的:

;build as a WINDOWS app

        .XCREF
        .NOLIST
        INCLUDE    \masm32\include\masm32rt.inc
        INCLUDE    \masm32\include\wininet.inc
        INCLUDELIB \masm32\lib\wininet.lib
        .LIST

;-------------------------------------------------------------------------

IsOnline PROTO   :LPSTR
Sleep PROTO STDCALL :DWORD

;-------------------------------------------------------------------------

IFNDEF FLAG_ICC_FORCE_CONNECTION
FLAG_ICC_FORCE_CONNECTION EQU 1
ENDIF

;-------------------------------------------------------------------------


        .CODE

IsOnline PROC    lpszURL:LPSTR

;Test Internet Connection
;
;lpszURL points to a zero-terminated test URL string (must start with "http://")
;
;Returns EAX = FALSE if not connected
;            = TRUE if connected
;        EDX = connection description (see InternetGetConnectedState documentation)

        push    eax
        mov     edx,esp

        INVOKE  InternetGetConnectedState,edx,0

        or      eax,eax
        jz      IsOnl0

        INVOKE  InternetCheckConnection,lpszURL,FLAG_ICC_FORCE_CONNECTION,0

IsOnl0: pop     edx
        ret

IsOnline ENDP

;-------------------------------------------------------------------------

szURL   db 'http://www.google.com',0

;-------------------------------------------------------------------------

_main   PROC

loop00: Invoke Sleep,5000 ;Sleep so it doesn't use 99% CPU
        INVOKE  IsOnline,offset szURL    
        or      eax,eax
        jz      loop00

        INVOKE  Beep,750,1000
        exit

_main   ENDP

;-------------------------------------------------------------------------

        END     _main

现在我想添加这样的东西

 .data
    MyTitle db "No internet",0
    MyText db "No active internet connection found, retrying in 5 seconds.",0

            push 0
            push offset MyTitle
            push offset MyText
            push 0
            call MessageBoxA

但我真的不知道我必须把它放在哪里

【问题讨论】:

  • 你为什么要在 MASM 中这样做?!?
  • 如果你喜欢它,给你更多的力量。我只是不明白在这种类型的事情上使用汇编的意义。
  • @MariusProllak:Nik 想知道的是,为什么在编写汇编的好处微不足道的情况下,你为什么要选择这样一种低级的方法来编写 Windows 程序。正如我在其他地方提到的,用 C、C++ 或其他一些中高级语言编写代码可能会为您省去很多麻烦。但是,如果您正忙于学习 x86 汇编程序,那就另当别论了,正如 Nik 所说,您将获得更多的权力。我只是不羡慕你必须用汇编程序编写一个 Windows 应用程序......
  • “我为什么不呢?” 那是男孩!

标签: winapi assembly x86 masm masm32


【解决方案1】:

这个怎么样:

_main   PROC

loop00: 
        INVOKE  IsOnline,offset szURL    
        or      eax,eax
        jnz      done

        push 0
        push offset MyTitle
        push offset MyText
        push 0
        call MessageBoxA

        Invoke Sleep,5000 ;Sleep so it doesn't use 99% CPU

        jmp loop00

done:
        INVOKE  Beep,750,1000
        exit

_main   ENDP

.data
    MyTitle db "No internet",0
    MyText db "No active internet connection found, retrying in 5 seconds.",0

这将首先等待 IsOnline 测试,如果失败,将等待 5 秒再试一次。否则它会在退出前发出哔哔声。

【讨论】:

  • 我认为您不应该将代码放入数据部分。
  • 滑到键盘上,发布得太早了;现在应该工作得更好了。
  • 所以,现在的问题是......它会显示多个消息框还是会无限期地等待按下按钮?我认为,这两种行为都是不可取的。
  • 同意。将“在 5 秒内重试”写入某个诊断流而不是用对话打扰用户可能是一个更好的主意。哦,MessageBoxA 的取消按钮很有效,因此用户可以退出否则无限循环。另一种方法是只显示一次对话框
  • @JohnKällén 对话框的问题是,我在已经绘制的表单上拥有整个 IsOnline 函数,如果没有 Internet 连接并且它在循环中,在单击表单上的某个位置后窗口加载圆圈出现,它说应用程序没有响应,你想关闭它吗bla bla。如果你能指出我如何解决这个问题的另一个方向,那将不胜感激。
猜你喜欢
  • 2016-05-13
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多