follow my heart...
分类:
2006-11-01 08:50:10
[点评:值得注意的是这里的破解方法还是比较独特的.程序使用线程,一旦发现他的提示对话框则关闭掉,不让他出现,蛮有意思的.]
1.先到 下载skin++的试用版本.其实就三个文件
SkinPPWTL.h
SkinPPWTL.lib
SkinPPWTL.dll
我 就不长篇大论叽叽歪歪了,写程序的一看这三个文件就明白是干什么的.下面分析一下如何将试用版本变为正式版本.Skin++在换肤的时候需要调用 skinppLoadSkin函数.该函数负责完成皮肤的切换并弹出一个注册对话框来让你注册.其实只要把这个讨厌的注册对话框干掉就一切OK了.嗯,想 法不错,下面就动手吧....
2.在App里面封装几个函数,或者你挺懒的话可以直接把下面几个函数拷过去,改改.
void CGGApp::SetSkin(CString strSkinFile)
{
//Init skins.
//Find the skins file in the Skins directory.
KillSkinpp();
strSkinFile=m_strPath+";
BOOL bReg=skinppLoadSkin(strSkinFile.GetBuffer(strSkinFile.GetLength()));
strSkinFile.ReleaseBuffer();
}
void CGGApp::KillSkinpp()
{
DWORD dwThread;
HANDLE hThread=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadKill,0,0,&dwThread);
CloseHandle(hThread);
}
DWORD CGGApp::ThreadKill(LPVOID lp)//注意!这个线程函数的声明是static的!
{
int iCount=0;
while (iCount++<10000)
{
Sleep(1);
HWND hWnd=::FindWindow(NULL,"UIPOWER");
if (hWnd==NULL) continue;
//
WPARAM wp=BN_CLICKED<<16 | IDNO;
::SendMessage(hWnd,WM_COMMAND,wp,0);
break;
}
return EXIT_SUCCESS;
}
一看就明白了.其中m_strPath是程序路径,在App的InitInstance函数里面得到就行.
//Application path===========================================
GetCurrentDirectory(MAX_PATH,m_strPath.GetBuffer(MAX_PATH+1));
m_strPath.ReleaseBuffer();