| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1784 人关注过本帖
标题:求助:第一次独立完成一个win32汇编,但在GetDlgItemInt处卡壳,希望各位指导
只看楼主 加入收藏
hyuanqing
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-4
收藏
 问题点数:0 回复次数:9 
求助:第一次独立完成一个win32汇编,但在GetDlgItemInt处卡壳,希望各位指导
一个简单的creakme,主要是预定义一个密码,然后由用户在对话框中输入密码,如果与预定义密码相同,则弹出"正确"的提示,反之提示"错误".
但写出来的程序不论如何总是直接跳转到"正确"提示...期望各位指导.原码如下.期待各位大虾指导~~~

[bo]CheckMe.asm:[/bo]
.386
    .model flat,stdcall
    option casemap:none

include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib

;ID_IN为输入框的id,ID_OK为“CheckME!”按键的ID
DLG_MAIN    equ                101
IDC_IN          equ                1000
ID_OK          equ                1001
IDC_STATIC      equ                -1

    .data?
hInstance    dd    ?
hWinMain    dd    ?

    .const
szMessage1        db    'Sorry,wrong.',0    ;消息框内容
szMessage2        db    'YES,Right!',0
szCaption        db    'Warn',0    ;弹出消息框的标题

    .code
;**********************************************************
;验证注册码子程序
;**********************************************************
_Check    proc    
    local    @lpNO[128]:dword
    pushad
    invoke    GetDlgItemInt,hWinMain,IDC_IN,addr @lpNO,FALSE
    mov    eax, @lpNO
;若输入为123则弹出“正确”的提示,否则弹出“错误”的提示
    .if    eax == 123    
        invoke    MessageBox,NULL,offset szMessage2,\
            offset szCaption,MB_OK
    .elseif     ;程序总是直接跳到该句...
        invoke    MessageBox,NULL,offset szMessage1,\
            offset szCaption,MB_OK
    .endif
    popad
    ret
_Check    endp
;***********************************************************

_ProcMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
        mov    eax,uMsg
        .if    eax==WM_COMMAND
            mov    eax,wParam
            .if    ax==ID_OK
                call _Check
            .endif
        
        .elseif    eax==WM_CLOSE
            invoke    EndDialog,hWnd,NULL
        .else    
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE    
        ret
_ProcMain    endp

start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,DLG_MAIN,\
            NULL,offset _ProcMain,NULL
        invoke    ExitProcess,NULL
        end    start

[bo]CheckMe.rc:[/bo]

#include <resource.h>

#define DLG_MAIN                        101
#define IDC_IN                          1000
#define IDC_OK                          1001
#define IDC_STATIC                      -1

DLG_MAIN DIALOG DISCARDABLE  0, 0, 177, 73
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "CheckMe!!!"
FONT 10, "System"
BEGIN
    LTEXT           "输入注册码:",IDC_STATIC,7,23,49,11
    EDITTEXT        IDC_IN,66,22,104,12,ES_AUTOHSCROLL
    PUSHBUTTON      "CHECKME!",IDC_OK,46,44,83,14
END
搜索更多相关主题的帖子: 汇编 卡壳 指导 
2008-09-04 23:20
hyuanqing
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-4
收藏
得分:0 
哦,另外补充一点,程序编译是用的qeditor,就是图标是一个放大镜放大一个文档右下角三分之一处的那个编辑器.
2008-09-04 23:27
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
在WM_COMMAND 消息中,怎么没有处理IDC_IN 的呢?
2008-09-04 23:31
hyuanqing
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-4
收藏
得分:0 
终于解决了
在call _Check之前应该先保存hWnd并且弹出hWinMain....
2008-09-05 01:12
hyuanqing
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-4
收藏
得分:0 
同样也感谢3楼的解答~
2008-09-05 01:13
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
可以吧改完之后的代码发下不
2008-09-05 14:31
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
到底该怎么改  我怎么不行
2008-09-05 15:33
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
我按照你说的    push hWnd
             pop hWinMain

                call _Check这样改了之后还是不对  ,然后   invoke    GetDlgItemInt,hWinMain,IDC_IN,NULL,TRUE   这句我这样改了一下  
   ; mov    eax, @lpNO这句就给删了   结果反而正确,我不是很明白后面两个参数的意思       加我QQ吧   讨论一下     QQ494000816

[[it] 本帖最后由 toyix 于 2008-9-5 18:35 编辑 [/it]]
2008-09-05 18:33
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
[bo][un]toyix[/un] 在 2008-9-5 18:33 的发言:[/bo]

我按照你说的    push hWnd
             pop hWinMain

                call _Check这样改了之后还是不对  ,然后   invoke    GetDlgItemInt,hWinMain,IDC_IN,NULL,TRUE   这句我这样改了一下  
   ; mov     ...

因为返回值是在eax 里面.而 @lpNO却是用来返回函数调用是否成功的,它里面只有两个值:TRUE  或FALSE
2008-09-05 19:09
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
  IpTranslated:指向一个Boolean变量的指针。该变量保存函数成功/失败的值  我有时候不明白的是  帮助上  说是     “指向一个Boolean变量的指针”   但在汇编里 没有指针啊   ,这样的变量 应该定义什么类型的变量   local    @lpNO[128]:dword 这个就可以吗
2008-09-05 19:50
快速回复:求助:第一次独立完成一个win32汇编,但在GetDlgItemInt处卡壳,希望各位 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017692 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved