📄 memplug.cpp
字号:
///////////////////////////////////////////////////////////////////////////////
//
// This is "Sample Code" and is distributable subject to the terms of the end
// user license agreement.
//
///////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <memory.h>
#include <ocidl.h>
#include <home.h>
#include "resource.h"
//#include <afxwin.h>
//#include <Winuser.h>
//#include "Afxwin.h"
/*
Add this to your .home.xml file to see this plugin:
If you are creating a new plugin based on this code
you absolutely must change the clsid!
<plugin clsid="{55EE36E7-7CC3-47e8-85E2-1D8644280E7A}">
</plugin>
*/
//andy
#define COMPILE_FLAG 0
HKEY hKeyLayerOfHomeSkin = NULL;
HKEY hKeyIndexOfFocusIcon = NULL;
ULONG g_dwDLLRefCount = 0;
#define INITGUID
#include "initguid.h"
//{55EE36E7-7CC3-47e8-85E2-1D8644280E7A}
// If you are creating a new plugin based on this code
// you absolutely must change the clsid!
#if COMPILE_FLAG==0
#define IMAGENAME TEXT("homeskin1_0.dll")
DEFINE_GUID(CLSID_PLUGMEM,
0x55ee36e7, 0x7cc3, 0x47e8, 0x85, 0xe2, 0x1d, 0x86, 0x44, 0x28, 0xe, 0x7a);
#define CLSIDTEXT__PLUGMEM TEXT("55EE36E7-7CC3-47e8-85E2-1D8644280E7A")
#elif COMPILE_FLAG==1
#define IMAGENAME TEXT("homeskin1_1.dll")
DEFINE_GUID(CLSID_PLUGMEM,
0x6579f3cb, 0xba4f, 0x46be, 0x89, 0x91, 0x83, 0x4, 0xb4, 0xea, 0xd, 0xdc);
#define CLSIDTEXT__PLUGMEM TEXT("6579F3CB-BA4F-46be-8991-8304B4EA0DDC")
#else
#define IMAGENAME TEXT("homeskin1_2.dll")
DEFINE_GUID(CLSID_PLUGMEM,
0x4d40b61a, 0xa0f8, 0x4aeb, 0xac, 0xea, 0x62, 0x0, 0x76, 0x2a, 0xa, 0x3b);
#define CLSIDTEXT__PLUGMEM TEXT("4D40B61A-A0F8-4aeb-ACEA-6200762A0A3B")
#endif
// define all IID GUIDs
DEFINE_GUID(IID_IHomePlugin, 0x7F0C58E9, 0x4F30, 0x47bb, 0x96, 0x93, 0xd7, 0x78, 0xe9, 0x99, 0xc4, 0x33);
DEFINE_GUID(IID_IHomePluginEnvironment, 0xFF328DC0, 0x22F5, 0x4AC1, 0xA1, 0x03, 0x19, 0xB3, 0x89, 0xC6, 0x33, 0xFA);
DEFINE_GUID(IID_IHomePluginEnvironment2, 0xE01A8A84, 0xDDEF, 0x438e, 0x90, 0x04, 0x3F, 0xB2, 0xA9, 0x08, 0xE4, 0x65);
DEFINE_GUID(IID_IPersistStream, 0x00000109, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
DEFINE_GUID(IID_IPersist, 0x0000010c, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
DEFINE_GUID(IID_IObjectWithSite, 0xFC4801A3, 0x2BA9, 0x11CF, 0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52);
//#include "home.h"
#include <COGUID.H>
#undef INITGUID
//andy
#include <Tapi.h>
#include <extapi.h>
#include <Tsp.h>
#pragma comment( lib,"cellcore")
//hopper test
#include <tlhelp32.h>
#pragma comment (lib,"toolhelp.lib")
#include <cfgmgrapi.h>
#pragma comment (lib,"aygshell.lib")
#define HOMESCREEN_BITMAP
#define TOTALBALLICON 3
#define TOTALBITMAP 8
#define GET_INCREASED_BITMAP(i) (i>=TOTALBITMAP?0:i)
#define GET_DECREASED_BITMAP(i) (i<0?TOTALBITMAP-1:i)
#define TAPI_API_LOW_VERSION 0x00020000
#define TAPI_API_HIGH_VERSION 0x00020000
#define EXT_API_LOW_VERSION 0x00010000
#define EXT_API_HIGH_VERSION 0x00010000
struct homeScreenBitmap
{
UINT xIcon;
UINT yIcon;
LPTSTR iconName;
UINT xBall;
UINT yBall;
}g_hsBitmap[TOTALBITMAP]=
{
{14,47,MAKEINTRESOURCE(IDI_ICON_MAIL),7,42},
{72+1,47,MAKEINTRESOURCE(IDI_ICON_CAMERA),67,42},
{130,47,MAKEINTRESOURCE(IDI_ICON_WM),124,42},
{14,103,MAKEINTRESOURCE(IDI_ICON_GAME),7,99},
{130,103+1,MAKEINTRESOURCE(IDI_ICON_VIDEOPLAYER),124,99},
{14-2,160,MAKEINTRESOURCE(IDI_ICON_HISTORY),7,152},
{74,159,MAKEINTRESOURCE(IDI_ICON_CALENDAR),67,152},
{131,159,MAKEINTRESOURCE(IDI_ICON_SETTING),124,152}
};
struct timeLocation
{
LONG xTime;
LONG yTime;
LONG widthTime;
LONG heightTime;
}g_timeLoc[5]=
{
{55,98,14,26},
{70,98,14,26},
{85,105,6,19},
{92,98,14,26},
{108,98,14,26}
};
static LPTSTR digitRource[10]=
{
MAKEINTRESOURCE(IDI_ICON_DIG_0),
MAKEINTRESOURCE(IDI_ICON_DIG_1),
MAKEINTRESOURCE(IDI_ICON_DIG_2),
MAKEINTRESOURCE(IDI_ICON_DIG_3),
MAKEINTRESOURCE(IDI_ICON_DIG_4),
MAKEINTRESOURCE(IDI_ICON_DIG_5),
MAKEINTRESOURCE(IDI_ICON_DIG_6),
MAKEINTRESOURCE(IDI_ICON_DIG_7),
MAKEINTRESOURCE(IDI_ICON_DIG_8),
MAKEINTRESOURCE(IDI_ICON_DIG_9)
};
static LPCTSTR progName[TOTALBITMAP]=
{
TEXT("\\windows\\tmail.exe"),
TEXT("\\Windows\\PhoneCamera.exe"),
TEXT("\\Windows\\wmplayer.exe"),
//TEXT("\\Storage\\windows\\Start Menu\\Games\\Solitaire.lnk"),
TEXT("\\Storage\\Application Data\\Home\\listview.exe"),
TEXT("\\windows\\VideoPlayer.exe"),
TEXT("\\windows\\clog.exe"),
//TEXT("\\Windows\\calendar.exe"),
TEXT("\\Storage\\windows\\Start Menu\\Calendar.lnk"),
TEXT("\\Windows\\settings.exe")
};
static const LPTSTR ballName[TOTALBALLICON]={MAKEINTRESOURCE(IDI_ICON_BALL_A),MAKEINTRESOURCE(IDI_ICON_BALL_B),MAKEINTRESOURCE(IDI_ICON_BALL_C)};
static HDC g_hdc;
static UINT g_focusIconIndex,g_ballIndex;
static UINT g_iconTimerID=0;
static bool g_bSecondTurn,g_bFocusChange=false;
static UINT g_networkTimerID;
static SYSTEMTIME g_oldTime;
static TCHAR g_opertorName[32];
static RECT g_operatorRect;
static bool g_hasfoundOperator=false;
static HANDLE g_hEvent,g_hThread;
static HWND g_hHomeScreenWnd=NULL;
void ShowDebugInfo(TCHAR* buffer1,TCHAR* buffer2)
{
MessageBox(NULL,buffer1,buffer2,MB_OK);
}
void CreateLogFile_CallStack(CHAR *str)
{
#ifdef LOG_FILE
FILE *fw = fopen("\\Windows\\andy_log_file.txt","a+");
fprintf(fw,"Enter %s of HomeSkin Plugin %d\n",str,COMPILE_FLAG);
fclose(fw);
#endif
}
BOOL isProcessRuning(LPCTSTR szRunName)
{
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe;
if(hSnap == (HANDLE)-1)
DWORD dwError = GetLastError();
pe.dwSize = sizeof(pe);
BOOL bNext=Process32First(hSnap, &pe);
while(bNext)
{
if(wcsicmp(pe.szExeFile,szRunName)==0)
{
//program is running
CloseToolhelp32Snapshot (hSnap);
return TRUE;
}
bNext=Process32Next(hSnap, &pe);
}
CloseToolhelp32Snapshot (hSnap);
return FALSE;
}
HRESULT HopperTest_Recover(void)
{
if(isProcessRuning(L"hopper.exe"))
{
#if 1
TCHAR *outBuffer = NULL;
TCHAR buff[] =
{
L"<wap-provisioningdoc>\
<characteristic type=\"Home\">\
<characteristic type=\"HKCU\\ControlPanel\\Home\">\
<parm name=\"Scheme\" value=\"\\Windows\\full.home.xml\"/>\
<parm name=\"ColorScheme\" value=\"\"/>\
<parm name=\"BgImage\" value=\"\"/>\
</characteristic>\
</characteristic>\
</wap-provisioningdoc>"
};
if(S_OK==DMProcessConfigXML(buff,CFGFLAG_PROCESS|CFGFLAG_METADATA,&outBuffer))
{
}
else
{
}
delete [] outBuffer;
#endif
#if 0
MoveFile(
L"\\Storage\\Application Data\\homeskin1_hopper.home.xml",//LPCTSTR lpExistingFileName,
L"\\Storage\\Application Data\\Home\\homeskin1_hopper.home.xml"//LPCTSTR lpNewFileName,
);
MoveFile(
L"\\Storage\\Application Data\\Home\\homeskin1.home.xml",//LPCTSTR lpExistingFileName,
L"\\Storage\\Application Data\\homeskin1.home.xml"//LPCTSTR lpNewFileName,
);
#endif
return(S_OK);
}
#if 0
MoveFile(
L"\\Storage\\Application Data\\homeskin1.home.xml",//LPCTSTR lpExistingFileName,
L"\\Storage\\Application Data\\Home\\homeskin1.home.xml"//LPCTSTR lpNewFileName,
);
MoveFile(
L"\\Storage\\Application Data\\Home\\homeskin1_hopper.home.xml",//LPCTSTR lpNewFileName,
L"\\Storage\\Application Data\\homeskin1_hopper.home.xml"//LPCTSTR lpExistingFileName,
);
#endif
return(E_FAIL);
}
void DrawBall(HDC hdc,UINT iconIndex,UINT ballIndex)
{
HICON hBall=LoadIcon(GetModuleHandle(IMAGENAME),ballName[ballIndex]);
DrawIcon(hdc,g_hsBitmap[iconIndex].xBall,g_hsBitmap[iconIndex].yBall,hBall);
}
void DrawProgIcon(HDC hdc,UINT iconIndex)
{
HICON hIcon=LoadIcon(GetModuleHandle(IMAGENAME),g_hsBitmap[iconIndex].iconName);
DrawIcon(hdc,g_hsBitmap[iconIndex].xIcon,g_hsBitmap[iconIndex].yIcon,hIcon);
}
void DrawAllIcons(HDC hdc,bool bSelect)
{
//DrawBall(hdc,g_focusIconIndex,g_ballIndex);
//g_ballIndex=0;
if(COMPILE_FLAG==0)
{
if(g_focusIconIndex<3&&bSelect)
{
DrawBall(hdc,g_focusIconIndex,g_ballIndex);
}
for(int i=0;i<3;i++)
{
DrawProgIcon(hdc,i);
}
}
else if(COMPILE_FLAG==1)
{
if((g_focusIconIndex==3||g_focusIconIndex==4)&&bSelect)
{
DrawBall(hdc,g_focusIconIndex,g_ballIndex);
}
for(int i=3;i<5;i++)
{
DrawProgIcon(hdc,i);
}
}
else
{
if((g_focusIconIndex>=5&&g_focusIconIndex<TOTALBITMAP)&&bSelect)
{
DrawBall(hdc,g_focusIconIndex,g_ballIndex);
}
for(int i=5;i<TOTALBITMAP;i++)
{
DrawProgIcon(hdc,i);
}
}
}
void CALLBACK iconTimerProc(
HWND hwnd,
UINT uMsg,
UINT idEvent,
DWORD dwTime
)
{
//if(hwnd==g_hHomeScreenWnd)
//MessageBox(NULL,L"HOME",L"Hello",MB_OK);
//return;
if(g_ballIndex<TOTALBALLICON)
{
HDC hdc=GetDC(NULL);
//HDC hdc=GetDC(FindWindow(L"MSStart",NULL));
if(!g_ballIndex)
{
DrawBall(hdc, g_focusIconIndex,g_ballIndex);
DrawProgIcon(hdc,g_focusIconIndex);
ReleaseDC(NULL,hdc);
//KillTimer(NULL,g_iconTimerID);
//KillTimer(hwnd,g_iconTimerID);
//g_iconTimerID=0;
return;
}
DrawBall(hdc, g_focusIconIndex,g_ballIndex);
DrawProgIcon(hdc,g_focusIconIndex);
ReleaseDC(NULL,hdc);
//ReleaseDC(hwnd,hdc);
g_ballIndex++;
if(g_ballIndex>=TOTALBALLICON)
{
g_ballIndex=0;
}
}
}
VOID FAR PASCAL andylineCallbackFunc(
DWORD hDevice,
DWORD dwMsg,
DWORD dwCallbackInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
}
DWORD GetTSPLineDeviceID(const HLINEAPP hLineApp, const DWORD dwNumberDevices, const DWORD dwAPIVersionLow, const DWORD dwAPIVersionHigh, const TCHAR *const psTSPLineName)
{
DWORD dwReturn = 0xffffffff;
for(DWORD dwCurrentDevID = 0 ; dwCurrentDevID < dwNumberDevices ; dwCurrentDevID++)
{
DWORD dwAPIVersion;
LINEEXTENSIONID LineExtensionID;
if(0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID,
dwAPIVersionLow, dwAPIVersionHigh,
&dwAPIVersion, &LineExtensionID))
{
LINEDEVCAPS LineDevCaps;
LineDevCaps.dwTotalSize = sizeof(LineDevCaps);
if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, &LineDevCaps))
{
BYTE* pLineDevCapsBytes = new BYTE[LineDevCaps.dwNeededSize];
if(0 != pLineDevCapsBytes)
{
LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
if(0 == lineGetDevCaps(hLineApp, dwCurrentDevID,
dwAPIVersion, 0, pLineDevCaps))
{
if(0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset),
psTSPLineName))
{
dwReturn = dwCurrentDevID;
}
}
delete[] pLineDevCapsBytes;
}
}
}
}
return dwReturn;
}
DWORD WINAPI ThreadProcGetAsyncKeyState(LPVOID lpParameter)
{
while(true)
{
SHORT result=GetAsyncKeyState(VK_UP);
if(result&0x80)
{
switch(g_focusIconIndex)
{
case 0:
g_focusIconIndex=5;
break;
case 1:
g_focusIconIndex=6;
break;
case 2:
g_focusIconIndex=7;
break;
case 3:
g_focusIconIndex=0;
break;
case 4:
g_focusIconIndex=2;
break;
case 5:
g_focusIconIndex=3;
break;
case 6:
g_focusIconIndex=1;
break;
case 7:
g_focusIconIndex=4;
break;
default:
break;
}
g_bSecondTurn=false;
g_bFocusChange=true;
g_ballIndex=0;
}
result=GetAsyncKeyState(VK_DOWN);
if(result&0x80)
{
switch(g_focusIconIndex)
{
case 0:
g_focusIconIndex=3;
break;
case 1:
g_focusIconIndex=6;
break;
case 2:
g_focusIconIndex=4;
break;
case 3:
g_focusIconIndex=5;
break;
case 4:
g_focusIconIndex=7;
break;
case 5:
g_focusIconIndex=0;
break;
case 6:
g_focusIconIndex=1;
break;
case 7:
g_focusIconIndex=2;
break;
default:
break;
}
g_bSecondTurn=false;
g_bFocusChange=true;
g_ballIndex=0;
}
Sleep(100);
}
return 0;
}
DWORD WINAPI ThreadProcGetOperatorName(LPVOID lpParameter)
{
HLINEAPP hLineApp;
HLINE hLine;
LINEINITIALIZEEXPARAMS liep = {0};
DWORD dwDevNum;
DWORD dwAPIVersion=TAPI_API_HIGH_VERSION;
LONG lResult;
static LINEOPERATOR lineOperator;
static LINEOPERATORSTATUS lineOperatorStatus;
DWORD dwTAPILineDeviceID = 0;
const DWORD dwMediaMode = LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE;
//RECT operatorRect;
while(true)
{
//WaitForSingleObject(g_hEvent,INFINITE);
// set the line init params
liep.dwTotalSize = sizeof(liep);
liep.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
lResult=lineInitializeEx(
&hLineApp,
GetModuleHandle(IMAGENAME),
andylineCallbackFunc,//NULL,
IMAGENAME,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -