SmallIcon

这个软件是很早之前写的,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(前面有个逗号。路径自己改,或者复制到系统目录)就可以了。

本人文笔不好,写的很渣......另本人是个菜鸟而且是业余程序员,水平不足请不要拍砖。。。。。

 源码

 

posted @ 2011-10-13 11:18  Suyana  阅读(253)  评论(0编辑  收藏  举报