微軟是個(gè)很大度的公司,至少目前是這樣的,我們用的操作系統(tǒng)98%都是Windows平臺(tái)??晌④浻袝r(shí)也很"小氣",比如界面UI。但是,正是這種"小氣",給許多編程愛(ài)好者提供了廣闊的用武之地。
和Borland公司的delphi開(kāi)發(fā)工具相比,用微軟的VC開(kāi)發(fā)工具開(kāi)發(fā)的界面的確算不上好看,但我們發(fā)現(xiàn)微軟自己的軟件界面又很漂亮。目前有不少軟件愛(ài)好者開(kāi)發(fā)出了多種換膚程序,其中SkinMagic就是其中的佼佼者。利用換膚程序就能開(kāi)發(fā)出和winamp、金山詞霸、QQ等軟件那樣的界面,根據(jù)需要隨時(shí)選擇更換皮膚。目前SkinMagic的商業(yè)使用需要注冊(cè),但作為軟件開(kāi)發(fā)人員自己自?shī)首詷?lè),就需要發(fā)揮自己的聰明才智了。
盡管已經(jīng)推出了SkinMagic 2.4版,但個(gè)人認(rèn)為還是SkinMagic 2.3版比較好用,而且穩(wěn)定。SkinMagic Toolkit 2.3包含必需四個(gè)文件,分別是SkinMagicTrial.dll,SkinMagicTrial.lib,SkinMagicLib.h和***.smf(皮膚文件)。
一、首先談?wù)勅绾卧谧约旱腣C程序中使用SkinMagic。
1.在stdafx.h中添加:
#include "SkinMagicLib.h"
#pragma comment(lib,"SkinMagicTrial.lib")
也可以在XXX.cpp文件中加入。效果是一樣的。
2.在BOOL CXXApp::InitInstance()中函數(shù)一開(kāi)始添加:
VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL));
VERIFY( 1 == LoadSkinFile("XXXX.smf"));
在定義對(duì)話框(CXXXDlg dlg;m_pMainWnd = &dlg;)之后顯示對(duì)話框(int nResponse = dlg.DoModal();)之前添加:
VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "MainFrame" ));
VERIFY( 1 == SetDialogSkin( "Dialog" ) );
這樣就可以載入美化后的皮膚了。
二、談?wù)勅绾纹平馄鋭?dòng)態(tài)連接庫(kù)SkinMagicTrial.dll
如果不破解,從網(wǎng)上下載的SkinMagic Toolkit 2.3在運(yùn)行時(shí)會(huì)首先彈出一個(gè)讓你注冊(cè)的警示框,但你點(diǎn)相關(guān)按鈕后警示框消失,不影響程序的運(yùn)行,但每次這樣讓人感覺(jué)不爽,于是參考一些資料將其破解。
準(zhǔn)備工具:1.反匯編工具W32dsm8.93。2.準(zhǔn)備一個(gè)能夠?qū)懯M(jìn)制的軟件,比如UltraEdit或者WinHex。此處使用UltraEdit。
破解步驟:
1.首先打開(kāi)W32dsm,反匯編(Disassembler)->打開(kāi)文件(open file to Disassembler),打開(kāi)SkinMagicTrial.dll。
2.分析完之后,點(diǎn)擊參考(Refs)->串式參考(String data References),找到“This application uses trial version”,雙擊??梢园l(fā)現(xiàn)這塊代碼由四個(gè)連著的push組成,而后call了一個(gè)子程序,看說(shuō)明是call USER32.MessageBoxA,這里就是彈出的那個(gè)未注冊(cè)對(duì)話框。只要把這一段刪了,就OK了。細(xì)看一下,我們可以看到有兩塊一樣的代碼。記住這兩塊代碼的起始位置。從00065B1開(kāi)始到00065DF前面為止。
3.關(guān)閉W32dsm,要不然一會(huì)不能正常保存。然后用UE打開(kāi)SkinMagicTrial.dll,Ctrl+G,找到00065B1和00065DF(注意一下彈出的對(duì)話框的提示,在前面加0x,這個(gè)不用我解釋了吧),把之間的代碼全都改為十六進(jìn)制數(shù)90(90在匯編中是nop指令,代表空操作),保存,再運(yùn)行VC程序,OK了,沒(méi)有那個(gè)對(duì)話框了??!
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。