Example #1
0
void Status_OnRButtonDown(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
	HMENU	hMenu=LoadMenu(hInst,(LPCSTR)IDR_MENU);
	HMENU	hSubMenu=GetSubMenu(hMenu,0);
	int		cmd;
	POINT	pt;
	GetCursorPos(&pt);

	cmd=TrackPopupMenu(hSubMenu,TPM_LEFTBUTTON|TPM_RETURNCMD,pt.x,pt.y,0,hWnd,NULL);
	//判断选中那个菜单
	switch(cmd)
	{
	case IDM_SETTING:
		DoPropertySheet(hWnd);
		break;
	case IDM_EXIT:
		{
			AssPrint("Select Exit ");
			UnInstallHook();
			ExitProcess(0);
		}
		break;
	case IDM_HELP:
		{
			ShellExecute(hWnd,"open","help.chm",NULL,NULL,SW_NORMAL);
		}
		break;
	default:
		break;	
	}
}
///////////////////////////////////// DllMain 函数 /////////////////////////////////////////   
//dll的入口点   
BOOL APIENTRY DllMain( HMODULE hModule,    
	DWORD  ul_reason_for_call,    
	LPVOID lpReserved   
	)   
{   
	switch(ul_reason_for_call)   
	{   
	case DLL_PROCESS_ATTACH:   
		//if(sHook)     

	case DLL_PROCESS_DETACH:   
		UnInstallHook();   
		break;   
	}   
	hmodDll=hModule;   
	return TRUE;   
}
//////////////////////////////////// InstallHook 函数 /////////////////////////////////////   
//安装或卸载钩子,BOOL IsHook参数是标志位   
//对要钩哪个API函数进行初始化   
//我们这里装的钩子类型是WH_GETMESSAGE   
void __declspec(dllexport) WINAPI InstallHook(BOOL IsHook,DWORD dwThreadId)   
{   
	if(IsHook)   
	{   
		hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hmodDll,dwThreadId);   

		//GetProcAddress(GetModuleHandle("GDI32.dll"),"ExtTextOutA"):取得要钩的函数在所在dll中的地址   

		HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"),   
			"TextOutW"),(PROC)&H_TextOutW,NULL);   
		HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"),   
			"TextOutA"),(PROC)&H_TextOutA,NULL);   
	}   
	else   
	{   
		UnInstallHook();   
		UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"),   
			"TextOutW"),(PROC)&H_TextOutW,NULL);   
		UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll"),   
			"TextOutA"),(PROC)&H_TextOutA,NULL);   
	}   
}
Example #4
0
extern "C" _declspec (dllexport) VOID InstallHook(HWND winhandle)
{
	UnInstallHook();
	DWORD threadId = GetWindowThreadProcessId(winhandle,NULL);
	g_hook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgPro,ModuleFromAdress(PlaceHolder),threadId);
}
Example #5
0
LRESULT CALLBACK StatusWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	switch (message) 
	{
	case WM_CREATE:
		{
			Status_OnCreate();
		}
		break;

	case WM_PAINT:
		{
			hdc = BeginPaint(hWnd, &ps);
			Status_OnPaint(hWnd,ps.hdc);
			EndPaint(hWnd, &ps);
		}
		break;
	case WM_SETCURSOR:
		{
			Status_OnCaptureMouse(hWnd,wParam,lParam);
		}
		break;

	case WM_LBUTTONUP:
		{
			Status_OnLButtonUp(hWnd,wParam,lParam);
		}
		break;
	case WM_RBUTTONDOWN:
		{
			Status_OnRButtonDown(hWnd,wParam,lParam);
		}
		break;
	case WM_MOUSEMOVE:
		{
			Status_OnMouseMove();
		}
		break;

	case WM_KEYDOWN:
		{
			Status_OnKeyDown(hWnd,message,wParam,lParam);
		}
		break;

	case WM_HOTKEY:
		{
			bSwitchOn=!bSwitchOn;
			if (bSwitchOn)
			{
				InstallHook();
				dwType=dwType&~TYPE_YINGYU;
				dwType|=TYPE_ZHONGWEN;

			}
			else
			{
				UnInstallHook();
				
				//改变状态栏的 中 英 选项
				dwType=dwType&~TYPE_ZHONGWEN;
				dwType|=TYPE_YINGYU;

				//隐藏输入窗口
				INPUTWNDSTRUCT.bShow=FALSE;
				UpdateInputWnd();
			}

			HDC hdc=GetDC(hStatus);
			Status_OnPaint(hStatus,hdc);
			ReleaseDC(hStatus,hdc);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}