这个软件是很早之前写的,2007年8月的。。。。。
心血来潮注册了个微博,总觉得要写些什么,于是。。。。。。。
本软件是用来更改桌面图标为小图标的,印象中不支持2K只支持xp,现测试了一下,居然支持Win7,不过win7显示的图标会大点。先上图:
第一张是xp截图是我同事电脑的,第二张是我自己的电脑截图win7的
现在讲一下代码,本程序使用win32asm编写(就是汇编啦),按照我的习惯,先贴代码。。。
.data?
hWndDesktop dd ?
hWndTaskbar dd ?
.data
szTaskbarClass db 'Shell_TrayWnd',0
szClass db '#32769',0
szDesktopClass db 'Progman',0
szDesktopWindow db 'Program Manager',0
szClassSys db 'SysListView32',0
.code
start:
xor eax,eax
mov hWndTaskbar,eax
mov hWndDesktop,eax
push 10
pop ecx
.repeat
invoke FindWindow,addr szDesktopClass,addr szDesktopWindow
invoke FindWindowEx,eax,0,0,0
invoke FindWindowEx,eax,0,addr szClassSys,0
.if (eax && !hWndDesktop)
mov hWndDesktop,eax
invoke GetWindowLong,hWndDesktop,GWL_STYLE
or eax,2
invoke SetWindowLong,hWndDesktop,GWL_STYLE,eax
.endif
;---------------------------------------------
invoke FindWindow,addr szDesktopClass,addr szDesktopWindow
invoke FindWindowEx,eax,0,addr szClass,0
invoke FindWindowEx,eax,0,addr szTaskbarClass,0
.if (eax && !hWndTaskbar)
mov hWndTaskbar,eax
invoke GetWindowLong,hWndTaskbar,GWL_EXSTYLE;获得风格值
or eax,WS_EX_LAYERED
invoke SetWindowLong,hWndTaskbar,GWL_EXSTYLE,eax;添加WS_EX_LAYERED风格
invoke SetLayeredWindowAttributes,hWndTaskbar,NULL,255,LWA_ALPHA;设置透明度
.endif
;----------------------------------------------
invoke Sleep,500
dec ecx
.until (ecx<0) || ( hWndDesktop !=0 || hWndTaskbar !=0 )
invoke ExitProcess,0
end start
代码很短哦,不用以为汇编都要写一大串代码,上面代码还有另外一个功能,就是设置任务栏透明度。
该图标大小原理其实很简单,桌面也是一个ListView控制,跟我们文件夹一样。普通的文件夹不是有个按列表查看么,其实就是改成这个而已
invoke FindWindow,addr szDesktopClass,addr szDesktopWindow
invoke FindWindowEx,eax,0,0,0
invoke FindWindowEx,eax,0,addr szClassSys,0
这个用了获取桌面的Handle,通过Handle获取风格,再改为列表查看就可以了。按列表查看的话,风格比原风格多2,所以用or eax,2给它加上2,这样就改为列表查看了
第二段代码获取任务栏的Handle,给它添加WS_EX_LAYERED风格,然后设置透明度就可以了,代码雷同啊。具体API不懂查MSDN吧。没用汇编好久了。。。。。。。。。。
最后那段循环是防止软件随系统启动时,桌面还没启动但软件先启动的情况下循环查找窗体句柄的,一共循环10次,每次延迟半秒。
完整的程序和代码见附件,郑重提示:渣360是会扫描出木马的,本人不想解释,你们可以用OllyDbg反编译自己看下代码。所以别告诉是提示有毒什么的,其他杀毒软件到时不清楚,估计也会。。
附件的setup文件夹是用了安装smallicon用来开机自启动的,刚看了下代码,木有完成。。。。。
需要开机自启动的朋友建议改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon的shell键值,在后面加上,smallicon.exe(前面有个逗号。路径自己改,或者复制到系统目录)就可以了。
本人文笔不好,写的很渣......另本人是个菜鸟而且是业余程序员,水平不足请不要拍砖。。。。。