//
//
//
//
//
//
//
//
//
//
软件Tags:
应用程序图标修改器源码系统结构:修改程序图标,取关联文件名,显示图标路径及图标,通过句柄取图标,初始化颜色表,CaptureDC,GetBitsAddress,GetBitsSize,BytesPerLine,Create,SetPixelColor,GetBitmapInfoAddress,GetWidth,GetHeight,WIDTHBYTES,GetColorTableAddress,GetBitCount,BMP文件头转字节集,BMP信息头转字节集,CNoColorTable,GetColorTableSize,NumDIBColorEntries,Write,RtlMoveMemory3,RtlMoveMemory4,BeginUpdateResourceA,EndUpdateResourceA,UpdateResourceA,RtlMoveMemory1,RtlMoveMemory2,ExtractAssociatedIcon,SHGetFileInfo,GetDC,CreateSolidBrush,FillRect,DrawIconEx,CreateCompatibleBitmap,CreateCompatibleDC,SelectObject,ReleaseDC,DeleteDC,DeleteObject,DrawIcon,GetClassLongA,FindWindowA,GetWindow,GetWindowTextA,GetWindowTextLengthA,GetDesktopWindow,IsWindowVisible,GetCurrentProcess,lstrcpyn,ReadProcessMemory,WriteProcessMemory,memcpy,CreateDIBSection,BitBlt,GdiFlush,SendMessage,FindExecutable, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_颜色选择器1_颜色被改变 || ||------修改程序图标 || ||------取关联文件名 || ||------_按钮_打开EXE_被单击 || ||------_按钮_开始修改_被单击 || ||------_按钮_显示ICO_被单击 || ||------显示图标路径及图标 || ||------通过句柄取图标 || ||------_按钮_保存图标_被单击 || ||------_拖放对象1_得到文件 || ||------_拖放对象3_得到文件 || ||------_拖放对象2_得到文件 || || ======位图操作类 || ||------_初始化 || ||------_销毁 || ||------初始化颜色表 || ||------CaptureDC || ||------GetBitsAddress || ||------GetBitsSize || ||------BytesPerLine || ||------Create || ||------SetPixelColor || ||------GetBitmapInfoAddress || ||------GetWidth || ||------GetHeight || ||------WIDTHBYTES || ||------GetColorTableAddress || ||------GetBitCount || ||------BMP文件头转字节集 || ||------BMP信息头转字节集 || ||------CNoColorTable || ||------GetColorTableSize || ||------NumDIBColorEntries || ||------Write || || ======调用的Dll || ||---[dll]------RtlMoveMemory3 || ||---[dll]------RtlMoveMemory4 || ||---[dll]------BeginUpdateResourceA || ||---[dll]------EndUpdateResourceA || ||---[dll]------UpdateResourceA || ||---[dll]------RtlMoveMemory1 || ||---[dll]------RtlMoveMemory2 || ||---[dll]------ExtractAssociatedIcon || ||---[dll]------SHGetFileInfo || ||---[dll]------GetDC || ||---[dll]------CreateSolidBrush || ||---[dll]------FillRect || ||---[dll]------DrawIconEx || ||---[dll]------CreateCompatibleBitmap || ||---[dll]------CreateCompatibleDC || ||---[dll]------SelectObject || ||---[dll]------ReleaseDC || ||---[dll]------DeleteDC || ||---[dll]------DeleteObject || ||---[dll]------DrawIcon || ||---[dll]------GetClassLongA || ||---[dll]------FindWindowA || ||---[dll]------GetWindow || ||---[dll]------GetWindowTextA || ||---[dll]------GetWindowTextLengthA || ||---[dll]------GetDesktopWindow || ||---[dll]------IsWindowVisible || ||---[dll]------GetCurrentProcess || ||---[dll]------lstrcpyn || ||---[dll]------ReadProcessMemory || ||---[dll]------WriteProcessMemory || ||---[dll]------memcpy || ||---[dll]------CreateDIBSection || ||---[dll]------BitBlt || ||---[dll]------GdiFlush || ||---[dll]------SendMessage || ||---[dll]------FindExecutable 调用的DLL命令: .DLL命令RtlMoveMemory3,,,"RtlMoveMemory" .参数pDest,ICONDIR,传址 .参数pSrc,字节集,传址 .参数ByteLen,整数型 .DLL命令RtlMoveMemory4,,,"RtlMoveMemory" .参数pDest,ICONDIRENTRY,传址 .参数pSrc,字节集,传址 .参数ByteLen,整数型 .DLL命令BeginUpdateResourceA,整数型,"kernel32","BeginUpdateResourceA",,启动在可执行文件中更新资源的进程,用于启动在一个可执行文件中更新资源的进程——注解:为了对执行文件或DLL中的资源进行更新可以首先调用BeginUpdateResource函数然后为准备修改的每个资源都调用一次UpdateResource最后用EndUpdateResource关闭资源以便结束更新操作 .参数pFileName,文本型,传址,指定可执行文件或DLL的名字将要对它的资源进行更新.调用这个函数的时候文件绝对不能执行 .参数bDeleteExistingResources,逻辑型,,TRUE(非零)表示删除文件中当前所有资源.如为FALSE则只改变在UpdateResource调用期间指定的现有资源 .DLL命令EndUpdateResourceA,逻辑型,,"EndUpdateResourceA",,终止在可执行文件中的资源更新,函数功能:该函数终止在可执行文件中的资源更新——返回值:如果函数运行成功,并且通过调用UpdateResource函数指定的不断积聚的资源修正内容被写入指定的可执行文件,那么其返回值为非零。如果函数运行失败,其返回值为零。若想获得更多的错误信息,请调用GetLastError函数。 .参数hUpdate,整数型,,用于资源更新的句柄。此句柄通过BeginUpdateResource函数返回 .参数fDiscard,逻辑型,,用来说明是否向可执行文件中写入资源更新内容。如果此参数为TRUE,则在可执行文件中无变化;如果此参数为FALSE,则在可执行文件中写入变化 .DLL命令UpdateResourceA,逻辑型,,"UpdateResourceA",,增加删除替代某可执行文件中的资源,函数功能:该函数增加,删除,或替代某可执行文件中的资源。——返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更多的错误信息,请调用GetLastError函数。注意:应用程序重复使用UpdateResource去改变资源数据。每次UpdateResource调用都要占用系统内部的一个增加、删除、替代的列表,而实际上并没有将数据写到可执行文件中。应用程序必须通过使用EndUpdateResource函数将每次积累的变化写入可执行文件中。 .参数hUpdate,整数型,,指定更新文件句柄。此句柄由BeginUpdateResource函数返回。 .参数lPTyPe,整数型,,指向说明将被更新的资源类型的字符串,它以NULL为终止符。这个参数可以是一个通过宏MAKENTRESOURCE传递的整数值,含义参见EnumResLangProc\lpType。资源类型名称(例如RT_ICONRT_ANIICON等) .参数IPName,整数型,,指向说明待被更新的资源名称的字符串,它以NULL为终止符。这个参数可以是一个通过宏MAKEINTRESOURCE传递的整数值 .参数wLanguage,整数型,,可以使用MAKELANGID构造 .参数lpData,字节集,传址,指向被插入可执行文件的资源数据的指针。如果资源是预定义类型值之一,那么数据必须是有效且适当排列的。注意这是存储在可执行文件中原始的一进制数据,而不是由Loadlcon,LoadString或其他装载特殊资源函数提供的数据。所有包含字符串、文本的数据必须是Unicode格式;IpData不能指向ANSI数据。存放资源的二进制数据的地址 .参数cbData,整数型 .DLL命令RtlMoveMemory1,,"kernel32.dll","RtlMoveMemory",,拷贝内存01_, .参数目标,GRPICONDIRENTRY,,any .参数缓冲区,ICONDIRENTRY,,any .参数尺寸,整数型 .DLL命令RtlMoveMemory2,,"kernel32.dll","RtlMoveMemory",,拷贝内存01_, .参数目标,字节集,传址,any .参数缓冲区,GRPICONDIR,传址,any .参数尺寸,整数型 .DLL命令ExtractAssociatedIcon,整数型,"shell32.dll","ExtractAssociatedIconA",,这个函数可判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联。随后,它允许我们提取出那些图标 .参数hInst,整数型,,Long,当前应用程序的实例句柄。也可用GetWindowWord函数取得拥有一个窗体或控件的示例的句柄 .参数文件名,文本型,,String,指定一个文件名,准备从该文件中提取图标。如果文件并非执行程序或DLL本身,但通过系统注册表与一个可执行文件关联,就用这个字串装载可执行程序的名字 .参数索引值,整数型,,Long,在其中装载图标在可执行文件中的资源标识符 .DLL命令SHGetFileInfo,整数型,,"SHGetFileInfo",公开 .参数pszPath,文本型 .参数dwFileAttributes,整数型 .参数psfi,SHFILEINFO .参数cbFileInfo,整数型 .参数uFlags,整数型 .DLL命令GetDC,整数型,,"GetDC",公开 .参数hwnd .DLL命令CreateSolidBrush,整数型,"gdi32.dll","CreateSolidBrush",公开 .参数crColor,整数型 .DLL命令FillRect,整数型,"user32.dll","FillRect",公开 .参数hdc,整数型 .参数lpRect,RECT,传址 .参数hBrush,整数型 .DLL命令DrawIconEx,整数型,,"DrawIconEx",公开,描绘一个图标或鼠标指针 .参数hdc .参数xLeft .参数yTop .参数hIcon .参数cxWidth .参数cyWidth .参数istepIfAniCur .参数hbrFlickerFreeDraw .参数diFlags .DLL命令CreateCompatibleBitmap,整数型,"gdi32.dll","CreateCompatibleBitmap",公开,执行成功返回位图句柄,零表示失败 .参数hdc,整数型,,设备场景句柄 .参数nWidth,整数型,,位图宽度 .参数nHeight,整数型,,位图高度 .DLL命令CreateCompatibleDC,整数型,"gdi32.dll","CreateCompatibleDC",公开,新设备场景句柄,若出错则为零 .参数hdc,整数型,,hdc,源设备场景句柄 .DLL命令SelectObject,整数型,"gdi32.dll","SelectObject",公开,每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以及区域等等。一次选入设备场景的只能有一个对象。选定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色及样式,与以前选入设备场景的相同hObject类型的一个对象的句柄,零表示出错。如选定的对象是一个区域(Region),结果就是下列常数之一:SIMPLEREGION,COMPLEXREGION或NULLREGION对区域进行描述,GDI_ERROR表示出错 .参数hdc,整数型,,一个设备场景的句柄 .参数hObject,整数型,,一个画笔、位图、刷子、字体或区域的句柄 .DLL命令ReleaseDC,逻辑型,"user32.dll","ReleaseDC",公开 .参数hwnd,整数型 .参数hDC,整数型 .DLL命令DeleteDC,整数型,"gdi32.dll","DeleteDC",公开,删除专用设备场景或信息场景,释放所有相关窗口资源。不要将它用于GetDC函数取回的设备场景,执行成功则为非零,失败则为零 .参数hdc,整数型,,将要删除的设备场景 .DLL命令DeleteObject,整数型,"gdi32.dll","DeleteObject",公开,用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放,非零表示成功,零表示失败 .参数hObject,整数型,,一个GDI对象的句柄 .DLL命令DrawIcon,整数型,"user32","DrawIcon" .参数hDC,整数型 .参数x,整数型 .参数y,整数型 .参数hIcon,整数型 .DLL命令GetClassLongA,整数型 .参数hwnd .参数m .DLL命令FindWindowA,整数型 .参数类名 .参数标题,文本型 .DLL命令GetWindow,整数型 .参数源窗口 .参数关系 .DLL命令GetWindowTextA .参数hwnd .参数标题,文本型,传址 .参数long .DLL命令GetWindowTextLengthA,整数型 .参数hwnd .DLL命令GetDesktopWindow,整数型 .DLL命令IsWindowVisible,逻辑型 .参数hwnd .DLL命令GetCurrentProcess,整数型,"kernel32.dll","GetCurrentProcess",,获取当前进程句柄 .DLL命令lstrcpyn,整数型,"kernel32.dll","lstrcpyn",,取变量地址,返回内存地址(此API还有其他作用) .参数lpString1,字节集,传址,欲取其指针的变量,一定要传址 .参数lpString2,字节集,传址,欲取其指针的变量一定要传址.重复一次 .参数iMaxLength,整数型,,这里无用,给0 .DLL命令ReadProcessMemory,整数型,"kernel32.dll","ReadProcessMemory",,读内存数据 .参数hProcess,整数型,,进程句柄 .参数lpBaseAddress,整数型,,内存地址 .参数lpBuffer,字节集,传址,数据指针 .参数nSize,整数型,,长度 .参数lpNumberOfBytesWritten,整数型,,实际长度 .DLL命令WriteProcessMemory,整数型,"kernel32.dll","WriteProcessMemory",,写内存数据 .参数hProcess,整数型,,进程句柄 .参数pBaseAddress,整数型,,内存地址 .参数lpBuffer,字节集,传址,数据指针 .参数nSize,整数型,,长度 .参数lpNumberOfBytesWritten,整数型,,实际写出长度 .DLL命令memcpy,,"Kernel32.dll","RtlMoveMemory",,复制内存(无返回值) .参数Destination,整数型,,目的指针 .参数Source,整数型,,源指针 .参数Length,整数型,,复制长度 .DLL命令CreateDIBSection,整数型,"gdi32.dll","CreateDIBSection" .参数hDC,整数型 .参数pBitmapInfo,字节集,传址 .参数un,整数型 .参数lplpVoid,整数型,传址 .参数handle,整数型 .参数dw,整数型 .DLL命令BitBlt,整数型,"gdi32.dll","BitBlt" .参数hDestDC,整数型 .参数x,整数型 .参数y,整数型 .参数nWidth,整数型 .参数nHeight,整数型 .参数hSrcDC,整数型 .参数xSrc,整数型 .参数ySrc,整数型 .参数dwRop,整数型 .DLL命令GdiFlush,整数型,"gdi32.dll","GdiFlush",,执行任何未决的绘图操作,如所有未决的绘图操作都成功完成,就返回TRUE(非零)。如任何一个操作失败,就返回零值 .DLL命令SendMessage,整数型,"user32.dll","SendMessageA" .参数hwnd,整数型 .参数wMsg,整数型 .参数wParam,整数型 .参数lParam,整数型 .DLL命令FindExecutable,整数型,"shell32.dll","FindExecutableA",,,查找与一个指定文件关联在一起的程序的文件名。可用Windows注册表编辑器将文件类型与特定的应用程序关联到一起。比如,扩展名为.TXT的文本文件通常与Windows记事本(Notepad.exe)关联到一起。如在文件管理器中双击含.TXT扩展名的一个文件,会自动启动记事本,并在其中载入文本文件大于32表示成功;31表示不存在文件类型的关联;0表示系统内存或资源不足;ERROR_FILE_NOT_FOUND表示指定的文件不存在;ERROR_PATH_NOT_FOUND表示指定的路径不存在;ERROR_BAD_FORMAT表示执行格式无效 .参数程序名,文本型,,指定要为其查找相关程序的一个文件名或程序名 .参数完整路径,文本型,,要使用的默认目录的完整路径 .参数字串缓冲区,字节集,传址,指定一个字串缓冲区,用于装载可执行程序的名字。注意这个字串预先至少都要初始化成MAX_PATH个字符的长度;
