【求助】AU3能不能为exe程序加皮肤?
我想为一款exe程序加载AU3里的Vista样式皮肤,我忙活了一整天都没有搞定,特来此请教各位大侠。AU3能不能为exe程序加皮肤? 楼主要学会搜索,本论坛上多的是这样的代码资源.怎么不搜一下呢? {:face (460):}为已有的exe程序另外添加皮肤,应该不可以吧 因为在那之后,我又更新了一下Thread.au3,使得部分函数不能兼容以前的代码。用以下这个测试:
#include <Thread.au3>
Const $tagSET_SKIN = "hWnd hWnd;wchar LicenKey;wchar SkinPath"
$sImagePath = @ScriptDir & "\SkinCrafterDll.dll"
$sFilePath = @ScriptDir & "\Sequence.skf"
$pLibrary = _RTLoadLibrary($sImagePath)
Const $pApplySkin = _RTGetProcAddress($pLibrary, "ApplySkin")
Const $pDecorateAs = _RTGetProcAddress($pLibrary, "DecorateAs")
Const $pLoadSkinFromFile = _RTGetProcAddress($pLibrary, "LoadSkinFromFile")
Const $pInitDecoration = _RTGetProcAddress($pLibrary, "InitDecoration")
Const $pInitLicenKeys = _RTGetProcAddress($pLibrary, "InitLicenKeys")
_RTFreeLibrary($pLibrary)
Run(@SystemDir & "\notepad.exe")
ProcessWait("notepad.exe")
Sleep(700)
$hWnd = WinGetHandle("")
$iProcessId = _RTGetWindowThreadProcessId($hWnd)
$iThreadId = @Extended
$hProcess = _RTOpenProcess($iProcessId)
$hThread = _RTOpenThread($iThreadId)
$pStartAddr = _RTVirtualAllocEx($hProcess, 2048)
$pParam = $pStartAddr + 512
_RTWriteProcessMemory($hProcess, $pParam, $hWnd, 4, "hWnd*")
_RTWriteProcessMemory($hProcess, $pParam + 4, 1, 6, "wstr")
_RTWriteProcessMemory($hProcess, $pParam + 20, $sFilePath, 518, "wstr")
_RTInfiltrateThread($hProcess, $hThread, $pStartAddr, 0, $pParam)
$bCode = "0x" & _
"55" & _ ; push ebp
"8BEC" & _ ; mov ebp, esp
"60" & _ ; pushad
"8B5D08" & _ ; mov ebx, dword ptr
"8D7B04" & _ ; lea edi, dword ptr
"57" & _ ; push edi
"57" & _ ; push edi
"6A00" & _ ; push 0
"57" & _ ; push edi
"B8" & _RTLongPtrToBytes($pInitLicenKeys) & _ ; mov eax, InitLicenKeys
"FFD0" & _ ; call eax
"6A01" & _ ; push 1
"B8" & _RTLongPtrToBytes($pInitDecoration) & _ ; mov eax, InitDecoration
"FFD0" & _ ; call eax
"8D7B14" & _ ; lea edi, dword ptr
"57" & _ ; push edi
"B8" & _RTLongPtrToBytes($pLoadSkinFromFile) & _ ; mov eax, LoadSkinFromFile
"FFD0" & _ ; call eax
"6A19" & _ ; push 19
"FF33" & _ ; push dword ptr
"B8" & _RTLongPtrToBytes($pDecorateAs) & _ ; mov eax, DecorateAs
"FFD0" & _ ; call eax
"B8" & _RTLongPtrToBytes($pApplySkin) & _ ; mov eax, ApplySkin
"FFD0" & _ ; call eax
"83C420" & _ ; add esp, 20
"61" & _ ; popad
"5D" & _ ; pop ebp
"C20400" ; ret 4
_RTLoadDllEx($sImagePath, $hProcess)
_RTInjectEx($hProcess, $pStartAddr, $bCode)
_RTResumeThread($hThread)
_RTCloseHandle($hThread)
_RTCloseHandle($hProcess)
注意把$sImagePath和$sFilePath改成你自己的DLL文件和皮肤文件的全路径。 刚好要用上,谢谢楼上的 呵呵,正需要这个哈学习学习 正想学习学习呢 测试成功!厉害 下载来试试 回复 4# pusofalse
谢谢分享! 回复 4# pusofalse
发生内存不能读的错误!! 高手神马的 最讨厌了 回复 11# lhylm
不知道什么情况。
页:
[1]