示例#1
0
void Mouseover::Init()
{
	ThTypes_Init();
	ZeroMemory(GlobalData, sizeof(TGlobalDLLData));
	strcpy(GlobalData->LibName, (gStarDictDataDir+ G_DIR_SEPARATOR_S "TextOutHook.dll").c_str());
	GlobalData->ServerWND = Create_hiddenwin();
}
示例#2
0
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
			g_hInstance = hInst;
			ourProcessID = GetCurrentProcessId();
			if(hSynhroMutex==0) {
				hSynhroMutex = CreateMutex(NULL, FALSE, "GoldenDictTextOutSpyMutex");
				if(hSynhroMutex==0) {
					return(FALSE);
				}
			}
			ThTypes_Init();
			uGdAskMessage = RegisterWindowMessage(GD_MESSAGE_NAME);
			FindGetPhysicalCursorPos();
        break;

      case DLL_PROCESS_DETACH:
//			if(hSynhroMutex) WaitForSingleObject(hSynhroMutex, INFINITE);
			if(hSynhroMutex) WaitForSingleObject(hSynhroMutex, 2000);
			if (TimerID) {
				KillTimer(0, TimerID);
				TimerID=0;
			}
			if(hSynhroMutex) {
				ReleaseMutex(hSynhroMutex);
				CloseHandle(hSynhroMutex);
				hSynhroMutex=0;
			}
			{
				MSG msg ;
				while (PeekMessage (&msg, 0, WM_TIMER, WM_TIMER, PM_REMOVE));
			}
			if ((hGetWordLib != 0)&&(hGetWordLib != (HINSTANCE)(-1))) {
				FreeLibrary(hGetWordLib);
			}
			Thtypes_End();
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
示例#3
0
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
			g_hInstance = hInst;
			hSynhroMutex = CreateMutex(NULL, FALSE, "GoldenDictTextOutSpyMutex");
			ThTypes_Init();
        break;

      case DLL_PROCESS_DETACH:
			WaitForSingleObject(hSynhroMutex, INFINITE);
			if (GlobalData->TimerID) {
				if (KillTimer(0, GlobalData->TimerID))
					GlobalData->TimerID=0;
			}
			ReleaseMutex(hSynhroMutex);
			CloseHandle(hSynhroMutex);
			{
			MSG msg ;
			while (PeekMessage (&msg, 0, WM_TIMER, WM_TIMER, PM_REMOVE)) {}
			}
			if ((hGetWordLib != 0)&&(hGetWordLib != (HINSTANCE)(-1))) {
				FreeLibrary(hGetWordLib);
			}
			Thtypes_End();
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
示例#4
0
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
(void) hInstance;
(void) hPrevInstance;
(void) lpCmdLine;
(void) nCmdShow;

TCHAR dir[MAX_PATH], libName[MAX_PATH], *pch;
HWND hServerWnd;
ActivateSpyFn activateSpyFn = NULL;
HINSTANCE spyDll = NULL;
int ret = -1;
MSG msg;

	if( !parentIsGD() )
		return -1;

	while( 1 ) {
		ThTypes_Init();
		if( GlobalData == NULL || GlobalData32 == NULL) 
			break;
		hServerWnd = LongToHandle( GlobalData32->ServerWND );

		GetModuleFileName( NULL, dir, MAX_PATH );
		pch = dir + lstrlen( dir );
		while( pch != dir && *pch != '\\' ) pch--;
		*(pch + 1) = 0;
		lstrcpy( libName, dir );
		lstrcat( libName, _T("GdTextOutSpy64.dll") );

		SetLowLabelToGDSynchroObjects();

		memset( GlobalData, 0, sizeof( TGlobalDLLData ) );
		lstrcpy( GlobalData->LibName, dir );
		lstrcat( GlobalData->LibName, _T("GdTextOutHook64.dll") );
		GlobalData->ServerWND = hServerWnd;

		spyDll = LoadLibrary( libName );
		if ( spyDll )
			activateSpyFn = ( ActivateSpyFn ) GetProcAddress( spyDll, "ActivateTextOutSpying" );
		if( !activateSpyFn ) {
			ret = -2;
			break;
		}

		activateSpyFn( TRUE );

		while( GetMessage( &msg, 0, 0, 0 ) )
			DispatchMessage( &msg );

		activateSpyFn( FALSE );

		ret = 0;
		break;
	}

	if( spyDll )
		FreeLibrary( spyDll );
	ThTypes_End();
	return ret;
}
示例#5
0
/** 
 **	The main initialization routine.
 **	
 **	@return true to continue loading the plug-in
 **	@return false to cause plug-in loading to stop.
 **   */
ACCB1 ASBool ACCB2 PluginInit(void)
{
	ThTypes_Init();
	SetUpUI();
	return true;
}