首页
社区
课程
招聘
[原创]给记事本添加最小化到系统托盘的功能
发表于: 2007-9-29 08:59 15372

[原创]给记事本添加最小化到系统托盘的功能

2007-9-29 08:59
15372

【文章标题】: 给记事本添加最小化到系统托盘的功能
【文章作者】: Suyana
【作者邮箱】: Suyasha@163.com
【作者QQ号】: 517949855(请注明来自看雪论坛)
【软件名称】: Notepad
【下载地址】: WinXP自带
【使用工具】: OD
【作者声明】: 我只是一只小菜鸟,失误之处难免,敬望诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  阅读之前应懂得的东东:
  
  在系统托盘加入图标需定义一NOTIFYICONDATAA结构,如下
  NOTIFYICONDATAA STRUCT
    cbSize            DWORD      ?        ;长度,为58
    hwnd              DWORD      ?
    uID               DWORD      ?        ;0
    uFlags            DWORD      ?        ;7
    uCallbackMessage  DWORD      ?        ;WM_USER+5=405
    hIcon             DWORD      ?
    szTip             BYTE 64 dup (?)        ;鼠标指向图标时显示的字符串
  NOTIFYICONDATAA ENDS
  该结构内容可用代码填充,但为节省代码,我直接写入数据段,该结构的hwnd和hIcon是可变的,其它都是不变的。
  用WinHex在00030256处添加数据:
  58000000 00000000 00000000 07000000
  05040000 00000000 44495920504520666F72204E6F7465706164
  保存就可以了。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  一些消息处理变量对应的汇编码:
  uMsg        =   dword ptr [ebp+C]
  wParam        =   dword ptr [ebp+10]
  lParam        =   dword ptr [ebp+14]
  ______________________________________________________________________________________
  步骤:
  1.添加函数和数据
          所用到的函数:        LoadIcon,ShowWindow,Shell_NotifyIconA,SendMessage。其中没有Shell_NotifyIcon函数,手工添加。添加后的函数指针为:010130E4
          数据的添加看上面
  -------------------------------------------------------------------
  2.写出程序伪代码:

 .if	uMsg ==	WM_SIZE				         ;WM_SIZE equ 5h
      .if wParam==SIZE_MINIMIZED 			 ;SIZE_MINIMIZED equ 1
  	push    dword ptr [1008810]			 ;hWnd 
  	pop	dword ptr [  ?  +4]			 ;NOTIFYICONDATAA第2项
  	push	2
  	push	01000000
  	call    [10011FC]				 ;invoke LoadIconW,hInstance,2
  	mov	dword ptr [  ? +14],eax 		 ;NOTIFYICONDATAA第6项
  	invoke ShowWindow,hWnd,SW_HIDE			 ;SW_HIDE equ 0
  	invoke Shell_NotifyIcon,NIM_ADD,addr note 
      .endif
  .elseif uMsg==WM_COMMAND 				 ;WM_COMMAND equ 111h
      .if lParam==0 
  	mov eax,wParam 
  	.if ax==3e8 
  	    invoke ShowWindow,hWnd,SW_RESTORE 		 ;SW_RESTORE equ 9
  	    invoke Shell_NotifyIcon,NIM_DELETE,addr note ;NIM_DELETE equ 2h
  	.endif 
      .endif 
  .elseif uMsg==WM_SHELLNOTIFY				;WM_SHELLNOTIFY equ 405h=400+5
      .if wParam==0 
  	.if lParam==WM_RBUTTONDOWN || lParam==WM_LBUTTONDBLCLK || WM_LBUTTONUP
  	    invoke SendMessage,hWnd,WM_COMMAND,3e8,0 
  	.endif 
      .endif
  .endif
 	pushad
  	cmp dword ptr [ebp+14],0
  	jnz     short 01007DA2			; 不为0则跳到 exit
  	mov	eax,dword ptr [ebp+10]
  	cmp	ax,3e8
  	jnz     short 01007DA2			; 不等则跳到 exit
  	push    01008430
  	push    2
  	call    [10130E4]			; SHELL32.Shell_NotifyIconA
  	push    9
  	push    dword ptr [1008810]
  	call    [10011CC]			; USER32.ShowWindow
  	popad					; exit:(跳到这里)
  	jmp 010035D0

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (25)
雪    币: 259
活跃值: (1704)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
2
写的不错,学习了!
2007-9-29 10:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没看懂!!!
2007-9-29 18:55
0
雪    币: 16
活跃值: (430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
赞一个.....支持原创
2007-9-29 20:53
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
记事本不能最大化啊,兄弟,最大化就到系统托盘了
2007-9-29 21:55
0
雪    币: 122
活跃值: (93)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
不错,有创新,学习
2007-9-29 22:19
0
雪    币: 313
活跃值: (14)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
7
谢谢你告诉我,我会尽快改成的
2007-9-29 22:35
0
雪    币: 313
活跃值: (14)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
8
记事本不能是最大化的BUG已经修复,原因是忘了写判断是最大化还是最小化。
谢谢大家支持!
附件已经更新,如有问题,欢迎大家指出。
2007-9-29 23:03
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习无止境!
2007-9-30 09:46
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
10
哈哈,又一遍PEDIY好文!!! 学习
2007-9-30 10:11
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
11
建义楼主把所有DIY记事本的功能集成一下!!

我有空也搞下,我大爱PEDIY啦
2007-9-30 10:18
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了!
2007-9-30 14:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
确实是一篇好文章呀。多谢楼主辛苦的劳动!!这是智慧与汗水的结晶,正好用的上,就下载下来使用了。今后还要向楼主多学习!以后争取自己也能写一点东西!
2007-11-24 16:46
0
雪    币: 88
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不错的文章啊,学习了.谢谢分享
2007-11-24 18:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主真是强人。学习了。谢谢
2007-11-26 16:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习一下,长见识
2007-11-26 16:39
0
雪    币: 213
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
没时间看了,我把它收藏了,谢谢
2007-11-28 00:34
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
好文,学习一下!
2007-11-28 05:50
0
雪    币: 213
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
7.保存就可以了,等着看运行结果吧。写代码一定要细心、失败了也不要灰心。偶可以试了n次才成功滴!
  建议为OllyDbg装个NonaWrite的插件,这样比较方便。
--------------------------------------------------------------------

NonaWrite是怎么用的?
2007-11-28 21:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习pediy

NonaWrite好像是一个同时写入多行汇编代码的od插件
2007-12-1 15:48
0
雪    币: 102
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
看看    z
2009-8-12 14:46
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主有创意啊
2009-8-13 18:08
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
沉默
2009-11-1 22:07
0
雪    币: 5809
活跃值: (3528)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
谢谢,学习了。
2009-11-4 20:53
0
雪    币: 457
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好的,温习了。。
2010-9-9 16:17
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码