在系统托盘加入图标需定义一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
---------------------------------------------------------------
3.找出程序的消息处理地址
下断"RegisterClassExW",运行。中断在010041BA,看堆栈:
0006FDF8 0006FE00 /pWndClassEx = 0006FE00
0006FDFC 77D14B20 USER32.LoadCursorW
0006FE00 00000030
0006FE04 00000000
0006FE08 01003134 NOTEPAD.01003134 ;这就是消息处理函数的地址了
来到01003134:
.......
0100313D cmp esi, 1C ; Switch (cases 2..8001)
01003140 push edi
01003141 push 8
01003143 pop edx
01003144 ja 0100338B ; WM_COMMAND equ 111h > 1C,跳到0100338B
...
0100338B mov edi, [ebp+14] ;跳到这里
0100338E mov eax, esi
01003390 sub eax, 111
01003395 je 010035D0 ;是WM_COMMAND消息跳到010035D0,修改为je 01007D76
------------------------------------------------------------
4.WM_COMMAND消息处理代码:
A.01003395 je 010035D0 ; 修改为je 01007D76
B.在01007D76处写入:
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
---------------------------------------------------------------
5.WM_SIZE消息处理代码:
A.把010031D8 je 01003223;改为jmp 01007DB0。查找方法同上。
B.在01007DB0输入:
新增内容:
----------------------------
mov eax, [ebp+10] ; 取wParam
dec eax
test eax, eax ; 是否为1,SIZE_MINIMIZED
jne 010031DD ; 不是SIZE_MINIMIZED消息直接返回
----------------------------------
pushad
push dword ptr [1008810]
pop dword ptr [1008434]
push 2 ; /RsrcName = 2.
push 01000000 ; |hInst = 01000000
call [10011FC] ; /LoadIconW
mov [1008444], eax
push 0 ; /ShowState = SW_HIDE
push dword ptr [1008810] ; |hWnd = NULL
call [10011CC] ; /ShowWindow
push 01008430
push 0
call [10130E4] ; SHELL32.Shell_NotifyIconA
popad
je 01003223
dec eax
jnz 010031C6
jmp 010031DD
--------------------------------------------------------------
6.WM_SHELLNOTIFY(405)消息处理代码:
A.由于空间不够,所以新建一个节01014000。
B.把010033C8 sub eax, 7CE8 ; 改成sub eax, 0EB
010033CD je 010034EA ; 改成ja 01014000
C.在01014000(我新建的节)输入:
dec eax
je short 01014013
sub eax, 7BFC
je 010034EA
jmp 010033D3
cmp dword ptr [ebp+10], 0
jnz 010033D3
cmp dword ptr [ebp+14], 201
jnz 010033D3
jmp short 01014050 ; jmp _send
cmp dword ptr [ebp+14], 203
jnz 010033D3
jmp short 01014050 ; jmp _send
cmp dword ptr [ebp+14], 204
jnz 010033D3
jmp short 01014050
nop
nop
nop
nop
nop
nop
nop
push 0 ; _send:
push 3E8
push 111
push dword ptr [1008810]
call [1001220] ; USER32.SendMessageW
jmp 010033D3
---------------------------------------------------------
7.保存就可以了,等着看运行结果吧。写代码一定要细心、失败了也不要灰心。偶可以试了n次才成功滴!
建议为OllyDbg装个NonaWrite的插件,这样比较方便。
分享到:
相关推荐
标题中的“记事本数据库(个人版[托盘图标])”指的是一个专为个人使用设计的应用程序,它可能集成了记事本的功能并增加了数据库管理的特性。在计算机软件中,托盘图标通常指的是程序在任务栏通知区域显示的小图标,...
4. `窗口隐藏`、`托盘图标信息框.ec`:这两个模块可能涉及到窗口管理功能,允许记事本窗口最小化到系统托盘,或者通过托盘图标显示信息。 5. `磁性窗口2.0.ec`:磁性窗口功能可能使得记事本可以自动吸附到屏幕边缘,...
一个类似于书签的记事本,我们上网的时候可能一时间要存放很多片段...当然也可以设置开机启动,左侧列表也可以设置自动隐藏,最小化后自动隐藏到系统托盘,该软件适合暂时存放片段无格式文本信息,所以保存功能并不是很好.
应用最小化时,可以通过系统托盘快速恢复。 系统托盘图标支持右键菜单,包括打开应用和退出应用选项。 4. 弹窗工具 提供多种弹窗类型,如信息框、警告框、通知、任务运行列表等。 支持创建笔记弹窗和设置提醒...
用户双击程序图标后,它会自动最小化到系统托盘,不占用桌面空间,同时保持程序运行状态,方便用户随时调用。当需要查看或编辑笔记时,用户可以双击系统托盘的图标打开记事本界面,或通过右键点击托盘图标选择“显示...
2. 自动隐藏:类似于QQ的最小化到系统托盘功能,【实用记事本】允许用户将程序窗口最小化到任务栏通知区域,而不是传统的任务栏。这样可以在不使用记事本时将其隐藏,保持桌面的整洁,同时在需要时快速调出。 3. 大...
Notepad2是一个外观类似系统记事本的文本编辑工具,但比记事本有了很大的增强。 此版本为正式版,进一步修正了相关细节问题@...11 可以指定ESC键最小化Notepad2到系统托盘或者关闭Notepad2 12 体积小巧,绿色便携。
通过调用Shell_NotifyIcon函数,我们可以将应用程序最小化到系统托盘区,并处理用户的鼠标点击事件。这为用户提供了更便捷的交互体验,使得应用在后台运行时也能轻松访问。 再者,电话本功能的实现则需要数据库的...
标签可拖曳排序,双击新建/关闭,多次撤销,一键删除空白行/只空一行,所有内容自动保存,关闭时自动记忆最后的状态,不用时可隐藏到桌面边缘,或最小化到系统托盘。软件提供了非常灵活的选项配置,各项扩展功能类似...
在Flex中,可以使用NativeWindow API来实现这个功能,通过监听窗口状态改变的事件,当窗口被最小化时,将其图标移至系统托盘,并保持其可操作性。 4. **打开和保存文件**:作为一款记事本应用,必须具备读写文件的...
自己做的记事本,在具备系统自带的记事本的功能, 文件:打开,保存,另存,打印. 编辑:复制,粘贴,剪贴, 格式:字体,颜色,换行 另特别添加了: 1 顶层窗口显示,可开启,关闭,很方便使用 ...4 最小化到托盘显示,还原显示.
这是一个很不错的记事本。 ... 2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相...11 可以指定ESC键最小化Notepad2到系统托盘或者关闭Notepad2
7. 系统托盘:当用户最小化程序时,图标会出现在系统托盘区,提供额外的功能选项,如退出、恢复等,使用NotifyIcon组件实现。 8. 打印功能:允许用户将文本内容打印到纸上,涉及PrintDocument和PrintPreviewDialog...
系统托盘功能是指当用户最小化记事本时,程序图标会出现在系统任务栏的右下角通知区域。这需要使用CSystray类或者在CFrameWnd的OnSize()函数中处理。当窗口被最小化时,将窗口隐藏并创建一个托盘图标。托盘图标可以...
MiniPad2是一款性能优,功能多,体积小的笔记软件,功能多样:“集笔记 / 便笺、计算器...不用时可隐藏到桌面边缘,或最小化到系统托盘。 软件提供了非常灵活的选项配置,各项扩展功能类似于插件,可自由选择是否启用。
特点: ... DIFF等众多文件 2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 ...11 可以指定ESC键最小化Notepad2到系统托盘或者关闭Notepad2
可设为随系统自动启动并最小化到系统托盘。 此版本自带英汉词典。 minipad2 为单文件纯绿色软件,解压至任意文件夹下即可使用,除了设为随系统启动的场合往注册表中添加一键值外,其他场合不写任何注册表。
Notepad2(系统记事本替代软件 ) Notepad2是一个外观类似系统记事本的文本编辑工具,但比记事本有了很大的增强。...11 可以指定ESC键最小化Notepad2到系统托盘或者关闭Notepad2 12 体积小巧,绿色便携。
本篇文章将围绕一个使用VC++6.0编写的日历备忘录应用程序进行深入探讨,该程序具有最小化到系统托盘的功能,并且是1.0版本,目前仅支持备忘当月事项,后续会持续优化。 一、VC++6.0基础 VC++6.0是微软公司推出的一...