| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 1143 人关注过本帖
标题:用Win32asm写的"同时打开多个网页的实用小工具",请大家指正~~
收藏  订阅  推荐  打印 
本主题由 zklhp 于 2008-9-29 19:15 设置高亮
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11
用Win32asm写的"同时打开多个网页的实用小工具",请大家指正~~

中秋自己过没趣,去南宁书城蹲地翻书也没趣,只好写小程序打发时间了~~
谁叫自己还是个菜鸟呢,所以写的都是小程序~~
这是个功能单一简单的小工具,觉得自己写得很粗陋,希望大家批评指正~~修改多了,它就会完善起来了.
;=========================================
程序很简单,但代码也有近400行吧.所以,只帖出主程序代码出来了.其它的,大家可以在附件中下载.
声明:
1.希望高手指正,而不是耻笑;
2.字符串匹配部分的代码,要感谢我们汇编论坛的dizengrong朋友!
;==========================
这个程序,你可以在列表中任意添加或删除网址,然后,就可以同时打开多个网址,对于每天都要到很多个网站浏览东西的朋友,不必为一一打开网址而麻烦了.
;==================================
;===程序功能:可以同时打开多个网页==
;=======作者:ONEPROBLEM============
        .386
        .model flat,stdcall
        option casemap:none
;===================================
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
include        shell32.inc
includelib    shell32.lib

IDD_DIALOG    equ    1
ICO_MAIN    equ    1
IDC_ADD        equ    1000
IDC_DELETE    equ    1001
IDC_EDIT    equ    1002
IDC_LISTBOX    equ    1003

        .data?
hInstance    dd    ?
hWinMain    dd    ?
szBuffer    db    256 dup (?)
szBuffer1    db    256 dup (?)

        .const
szFileName    db    'openwebtools.bat',0
szCaption    db    '友情提示',0
szText        db    '请您首先在列表中添加网址!',0
;===================================================
        .code
include        _writeFile.asm
include        _initListBox.asm
include        _deleteAddress.asm

;=================对话框过程==========================
_procDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam
        
        mov    eax,wMsg
        .if    eax == WM_CLOSE
            invoke    EndDialog,hWnd,NULL
            
        .elseif    eax == WM_INITDIALOG
            push    hWnd
            pop    hWinMain
            invoke    LoadIcon,hInstance,ICO_MAIN
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            invoke    _initListBox,addr szFileName,hWinMain,IDC_LISTBOX
            
        .elseif    eax == WM_COMMAND
            mov    eax,wParam
            
            .if    ax == IDCANCEL
                invoke    EndDialog,hWnd,NULL
                
            .elseif    ax == IDOK
                invoke    ShellExecute,hWnd,0,addr szFileName,0,0,SW_SHOW
                .if    eax < 31
                    invoke    MessageBox,hWnd,addr szText,addr szCaption,MB_OK
                .else
                    invoke    EndDialog,hWnd,NULL
                .endif
                
            .elseif    ax == IDC_EDIT
                invoke    GetDlgItemText,hWnd,IDC_EDIT,addr szBuffer,sizeof szBuffer

            .elseif    ax == IDC_ADD            ;添加模块
                invoke    SendDlgItemMessage,hWnd,IDC_LISTBOX,LB_ADDSTRING,0,addr szBuffer
                invoke    _writeFile,addr szFileName,hWinMain,addr szBuffer
                
            .elseif    ax == IDC_LISTBOX
                shr    eax,16
                .if    ax == LBN_SELCHANGE
                    invoke    RtlZeroMemory,addr szBuffer1,sizeof szBuffer1
                    invoke    SendMessage,lParam,LB_GETCURSEL,0,0
                    lea    ecx,szBuffer1
                    invoke    SendMessage,lParam,LB_GETTEXT,eax,ecx
                .endif
            
            .elseif    ax == IDC_DELETE        ;删除模块
                invoke    _deleteAddress,addr szFileName,hWinMain,addr szBuffer1
                invoke    SendDlgItemMessage,hWnd,IDC_LISTBOX,LB_RESETCONTENT,0,0
                invoke    SendMessage,hWnd,WM_INITDIALOG,0,0
            .endif
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret
        
_procDlgMain    endp
;======================主程序==================================
start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,IDD_DIALOG,NULL,offset _procDlgMain,NULL
        invoke    ExitProcess,NULL
        
        end    start
;==============================================================
附件: 只有本站会员才能下载或查看附件,请您 登录注册
搜索更多相关主题的帖子: win32asm  web  
2008-9-15 22:33
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

  羡慕中...

新残中残脑残片 一片顶六片 没有最残 只有更残 你残 我残 大家残 大家残 才是真的残 残 残 残 残到姥姥家
2008-9-17 20:39
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

这个程序还是有几个大BUG.就在删除模块中。我暂时还不知道怎么办
问题是这样的:打开程序后,没有任何选择就点击“删除”,就弹出了提示消息框,正常;当选择并删除了一个项目后,就在再没有任何选择的情况下,再点“删除”,程序就崩溃了~~
还有,在输入框中,没有任何输入时,点击“添加”,列表框却增加了一个空的项目!
2008-9-18 08:39
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

期待帮忙中... ...
2008-9-18 08:41
zklhp
Rank: 12Rank: 12Rank: 12
来自:china
等级:版主
威望:9
帖子:735
积分:8621
注册:2007-7-10

ONEPROBLEM 在 2008-9-18 08:41 的发言:

期待帮忙中... ...
等偶有电脑再给你看看吧 上了大学连电脑都玩不上 555
2008-9-18 16:15
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

崩溃.  40137c指令出错.
0040137C   MOV DL,BYTE PTR DS:[EDI-D]
这里访问违规 [EDI-D]指向00cafff2地址是无效的.

对应这部分


              @@:
              mov    dl,[edi-13]       ;是否到了文件尾
              cmp    dl,0
              je    _Ret3
              mov    al,[edi+ebx+2]
              mov    [edi-14],al
              inc    edi
              jmp    @B


最近一看代码就头疼,只好灌水了.

新残中残脑残片 一片顶六片 没有最残 只有更残 你残 我残 大家残 大家残 才是真的残 残 残 残 残到姥姥家
2008-9-18 22:50
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

你们都要疼我哦 在 2008-9-18 22:50 的发言:

崩溃.  40137c指令出错.
0040137C   MOV DL,BYTE PTR DS:[EDI-D]
这里访问违规 [EDI-D]指向00cafff2地址是无效的.

对应这部分


              @@:
              mov    dl,[edi-13]       ;是否到了文件尾
              cmp     ...
呵呵~~其实这个BUG还是蛮容易修正的~~
就是在每次调用完这个"删除模块"后,将它的"_lpBuffer1"这个参数清0就可以了.
;===========================在主程序中==============================
.elseif    ax == IDC_DELETE        ;删除模块
                invoke    _deleteAddress,addr szFileName,hWinMain,addr szBuffer1
        ;(就添加这句=====>    invoke    RtlZeroMemory,addr szBuffer1,sizeof szBuffer1
                invoke    SendDlgItemMessage,hWnd,IDC_LISTBOX,LB_RESETCONTENT,0,0
                invoke    SendMessage,hWnd,WM_INITDIALOG,0,0
2008-9-18 23:21
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

添加模块中的BUG还不知道怎么修正~~
2008-9-18 23:22
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

mov    esi,_lpBuffer1            ;先检测是否填写了网址
        mov    ecx,[esi]
        cmp    ecx,0


这样检测好象有问题.

新残中残脑残片 一片顶六片 没有最残 只有更残 你残 我残 大家残 大家残 才是真的残 残 残 残 残到姥姥家
2008-9-19 00:37
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11
回复 9# 你们都要疼我哦 的帖子

朋友,谢谢你!
这个BUG也暂时解决了:
就是在添加模块中设置返回值,即调用_writeFile成功返回1,失败返回0;然后,再根据返回值是否调用添加列表项目:
在主程序中修改:
.elseif    ax == IDC_ADD            ;添加模块
    invoke    _writeFile,addr szFileName,hWinMain,addr szBuffer
            .if    eax
             invoke                                          SendDlgItemMessage,hWnd,IDC_LISTBOX,LB_ADDSTRING,0,addr szBuffer
           .endif
2008-9-19 07:39
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.056344 second(s), 10 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved