注册 登录
编程论坛 汇编论坛

初学汇编,写了个自动关闭QQ迷你首页的小程序

ONEPROBLEM 发布于 2008-07-11 20:51, 9846 次点击
我有3个QQ,每天都要登录,可是登录后,"腾讯网迷你首页"就会自动弹出,干扰了我的心情(呵呵~~只有会员才免遭此罪哦).于是,我编写了个程序:在10分钟内主动查找"腾讯网迷你首页",发现就把它关掉,不给它弹出的机会!于是,世界开始宁静了... ...10分钟后,这个小程序又自动退出了.
以下是代码(已测试),希望大家批评指正:

;用定时器定时查找QQ迷你窗口,找到后就关闭它;
;如果10分钟内没有找到,则自动退出.
;作者:ONEPROBLEM
;===========================================
        .386
        .model flat,stdcall
        option casemap:none

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

ID_TIMER equ    1
ICO_MAIN    equ    1
DLG_MAIN    equ    1
IDC_COUNT    equ    100

        .data?
hInstance    dd    ?
hWinMain    dd    ?
idTimer        dd    ?

        .const
szCaption    db    '腾讯网迷你首页',0
;========================================================
        .code
_ProcTimer    proc    _hWnd,uMsg,_idEvent,_dwTime    ;定时器过程
        
        pushad
        invoke    GetDlgItemInt,hWinMain,IDC_COUNT,NULL,FALSE
        sub    eax,1
        .if    eax == 0    ;倒计时为0,则程序退出
            invoke SendMessage,hWinMain,WM_CLOSE,0,0
        .endif
        invoke    SetDlgItemInt,hWinMain,IDC_COUNT,eax,FALSE
        popad
        ret
_ProcTimer    endp
;====================================================================
_ProcDlgMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,IParam

        mov    eax,uMsg
        
        .if    eax == WM_TIMER
            mov    eax,wParam
            .if    eax == ID_TIMER
            invoke    FindWindow,NULL,addr szCaption  ;查找QQ首页
                .if    eax
                    mov    hWnd,eax
                    invoke    SendMessage,hWnd,WM_CLOSE,0,0
                .endif
            .endif
            
        .elseif    eax == WM_INITDIALOG
            push    hWnd
            pop    hWinMain
            invoke    LoadIcon,hInstance,ICO_MAIN
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            
            invoke    SetTimer,hWnd,ID_TIMER,3000,NULL  ;每3秒钟就查找一次
            invoke    SetTimer,NULL,NULL,1000,addr _ProcTimer
            mov    idTimer,eax
        
        .elseif    eax == WM_CLOSE
            invoke    KillTimer,hWnd,ID_TIMER
            invoke    KillTimer,NULL,idTimer
            invoke    EndDialog,hWnd,NULL
            
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret
_ProcDlgMain    endp
;=============================================================
start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
        
        end    start


;===================================================================================
;===================================================================================
;以下是.RC文件:
#include        <resource.h>

#define    DLG_MAIN    1    //对话框
#define    ICO_MAIN    1
#define    IDC_COUNT    100

ICO_MAIN ICON        "1.ico"

DLG_MAIN DIALOG    50,50,120,60
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION    "守候者 SH1.0"
FONT    14,"宋体"
{
  LTEXT "说明:1、这个小工具可以帮你\n关掉烦人的腾讯网迷你首页;",-1,8,5,100,22
  LTEXT "2、程序将在10分钟后自动关闭。",-1,8,22,100,22
  LTEXT    "倒计时:",-1,30,43,35,10
  LTEXT    "600",IDC_COUNT,60,43,15,10
  LTEXT "秒",-1,75,43,10,10
}

[[it] 本帖最后由 ONEPROBLEM 于 2008-7-13 11:11 编辑 [/it]]

[[it] 本帖最后由 ONEPROBLEM 于 2008-7-13 21:35 编辑 [/it]]
28 回复
#2
zklhp2008-07-12 16:42
挺实用  支持下   要是打个包就好了 呵呵
#3
你们都要疼我哦2008-07-13 02:07
学习学习. 这个题目可以当成汇编定时器部分的习题
#4
ONEPROBLEM2008-07-13 11:13
谢谢大家的关注,使我增强了学习汇编的动力。
包我已经打好了,欢迎下载,并修改完善。
#5
benyu11072008-07-13 12:13
顶!
#6
yanging51612008-07-15 02:25
不错
#7
xujun12072008-07-15 16:16
顶,什么时候我也能自己编个小程序呀……
#8
hurtsky2008-07-15 20:38
俺刚学汇编,看不懂,还是要看一下
#9
ONEPROBLEM2008-07-15 22:48
回复 7# xujun1207 的帖子
一个月之前,我也是这么想的呀.
其实,只要每天都去积累,你就会发现,有一天,自己也成了别人要羡慕的水平.
说真的,我觉得自己还没入门呢.
#10
nieshen2008-07-16 10:27
回复 9# ONEPROBLEM 的帖子
虽然不怎么用汇编,还是要顶,支持原创.
#11
刘金龙2008-08-23 19:46
不错
#12
无理取闹2008-08-23 22:11
这些曾经的爱好 现在都荒废了
#13
ONEPROBLEM2008-08-24 22:37
[bo][un]无理取闹[/un] 在 2008-8-23 22:11 的发言:[/bo]

这些曾经的爱好 现在都荒废了

时过境迁,许多事情总是要变化的。人往高处走嘛~~汇编确实可以修习内力,内力足了就是闯荡天下的时候了~~
不像我,老是菜菜的长不大,只能在这些小程序上玩玩而已了~~~
#14
beijiexiong2008-09-13 02:52
不错,挺好的
#15
jijinding2008-09-17 14:06
挺有用,下了
#16
fish7fish72008-09-19 18:42
这么复杂啊,直接删除QQexternal.exe不就成了?
#17
fish7fish72008-09-19 18:52
据说这样也可以,不过本人没试过,在IE浏览器中的地址栏中把首页地址复制下来,然后打开注册表(运行中大 regedit),按F3键 粘贴刚复制下来的地址 查找一下 把显示出来的 字串符值 删除掉
#18
imur022008-10-13 02:56
楼主高手啊!我现在刚刚学汇编,头都大,佩服!!!!
有个问题请教一下:
ID_TIMER    equ    1
ICO_MAIN    equ    1
DLG_MAIN    equ    1
IDC_COUNT    equ    100
这几个东东应该是数据段的吧,为什么没有加.data在上面呢?请教请教!谢谢先
#19
ONEPROBLEM2008-10-13 09:03
[bo][un]imur02[/un] 在 2008-10-13 02:56 的发言:[/bo]

楼主高手啊!我现在刚刚学汇编,头都大,佩服!!!!
有个问题请教一下:
ID_TIMER    equ    1
ICO_MAIN    equ    1
DLG_MAIN    equ    1
IDC_COUNT    equ    100
这几个东东应该是数据段的吧,为什么没有加.data在上面呢?请教请教!谢 ...

等值预定义,相当于C语言中的"宏定义".
#20
asli332008-10-14 23:20
呵呵,练手相当不错的成果啊
#21
sainthzh2008-10-21 16:40
ding
#22
hahachinahaha2008-10-23 13:19
楼主学习很有干感想和方法!!支持~~
#23
a120306892008-11-18 11:43
上汇编都快半年呢,老师上的英文版。真可怜我英语那个烂,都没听(自己看也看得迷糊)。看不懂,相信我会再回来留下我看懂了的大脚印
#24
bingxuejiejie2008-11-24 16:56
这个程序怎么启动,是和qq一起启动吗?还是要自己启动,还 是开机启动,最好是上qq时它自己启动,这样最好,刚下还 没 用,支持原创,我是刚学汇编看不 懂,看了对汇编有了兴趣
#25
jxyga1112008-11-24 17:02
回复 第4楼 ONEPROBLEM 的帖子
還是你強啊,我不懂匯編的
#26
蜗牛慢慢爬2009-09-13 17:18
高手,
#27
qiu11232011-06-10 18:10
不会用
#28
jptiancai2011-08-13 22:36
很欣赏LZ 学以致用的 智慧,更期待你的帖子!
#29
liujiahuan2011-10-03 21:37
顶顶,以后我也要变小工具
1