| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5215 人关注过本帖, 1 人收藏
标题:用Win32asm写的"同时打开多个网页的实用小工具",请大家指正~~
只看楼主 加入收藏
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
结帖率:100%
收藏(1)
 问题点数:0 回复次数:12 
用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
;==============================================================

ONEPROBLEM.rar (9.4 KB)


001.jpg (30.05 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: win32asm web 
2008-09-15 22:33
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
  羡慕中...

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2008-09-17 20:39
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
这个程序还是有几个大BUG.就在删除模块中。我暂时还不知道怎么办
问题是这样的:打开程序后,没有任何选择就点击“删除”,就弹出了提示消息框,正常;当选择并删除了一个项目后,就在再没有任何选择的情况下,再点“删除”,程序就崩溃了~~
还有,在输入框中,没有任何输入时,点击“添加”,列表框却增加了一个空的项目!
2008-09-18 08:39
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
期待帮忙中... ...
2008-09-18 08:41
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-9-18 08:41 的发言:[/bo]

期待帮忙中... ...


等偶有电脑再给你看看吧 上了大学连电脑都玩不上 555
2008-09-18 16:15
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
崩溃.  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-09-18 22:50
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
[bo][un]你们都要疼我哦[/un] 在 2008-9-18 22:50 的发言:[/bo]

崩溃.  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-09-18 23:21
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
添加模块中的BUG还不知道怎么修正~~
2008-09-18 23:22
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
mov    esi,_lpBuffer1            ;先检测是否填写了网址
        mov    ecx,[esi]
        cmp    ecx,0


这样检测好象有问题.

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2008-09-19 00:37
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
回复 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-09-19 07:39
快速回复:用Win32asm写的"同时打开多个网页的实用小工具",请大家指正~~ ...
数据加载中...
 
   



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

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