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

📄 netchck.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
////******************************************************************************void CHXNetCheck::SleepWell(ULONG32 ulInterval){	ULONG32 ulStartTime, ulCurrentTime;	MSG			    msg;	char	szClassName[16] = ""; /* Flawfinder: ignore */	HWND	hActiveWindow = NULL;		// Get start time	ulStartTime = HX_GET_TICKCOUNT();	do	{	    // Keep pumping messages   	    if(PeekMessage(&msg, NULL,0,0,PM_REMOVE))	    {		if(msg.message == WM_QUIT) 		{		    PostQuitMessage(0);		    break;		}		else		{		    // XXXJDL Since we are pumping messages through here while we block elsewhere in the calling code		    // we need to get the free dialog navigation support from windows for modeless dialog boxes.  Modal dialog		    // boxes are fine since they will not go through this message loop.  I have been using this method		    // in the main player application and it seems to work ok.  Let me know if this causes pain for anyone.		    // Basically if the active window is a dialog box class then we are assuming it is a modeless dialog box		    // and calling IsDialogMessage with this handle.  If the active window is neither a dialog class or		    // doesn't process the dialog message then we do the normal message dispatching		    hActiveWindow = ::GetActiveWindow();		    szClassName[0] = '\0';		    ::GetClassName(hActiveWindow,				   OS_STRING2(szClassName,sizeof(szClassName)),				   sizeof(szClassName));		    if (strcmp(szClassName,DIALOG_CLASS) || !IsDialogMessage(hActiveWindow, &msg))		    {			TranslateMessage(&msg);       			DispatchMessage(&msg);		    }		}	    }	    // If we have waited ulInterval time then drop out	    ulCurrentTime = HX_GET_TICKCOUNT();	} while (CALCULATE_ELAPSED_TICKS(ulStartTime, ulCurrentTime) < ulInterval);}//******************************************************************************//// Method:	CHXNetCheck::GetDNSAddress//// Purpose:	Determines the IP address of the user's primary DNS server.//// Notes:	Returns IP address in numeric form, in a CHXString. An empty//		string is returned when the IP address cannot be determined.////******************************************************************************void CHXNetCheck::GetDNSAddress(CHXString& strDNS){#ifndef _WIN16    strDNS.Empty();    HKEY hKey = 0;    // Win95/98 likes it here    RegOpenKey(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\VxD\\MSTCP\\Parameters",	    &hKey);    if (hKey != NULL)    {    	GetNameServerKey(hKey, "NameServer", strDNS);		if (strDNS.IsEmpty())    		GetNameServerKey(hKey, "DhcpNameServer", strDNS);		RegCloseKey(hKey);    }    // Some Win 95/98 machines put it here..    if (strDNS.IsEmpty())    {    	RegOpenKey(HKEY_LOCAL_MACHINE, OS_STRING("System\\CurrentControlSet\\Services\\VxD\\MSTCP"),	    	&hKey);        	if (hKey != NULL)    	{    	    GetNameServerKey(hKey, "NameServer", strDNS);			if (strDNS.IsEmpty())    			GetNameServerKey(hKey, "DhcpNameServer", strDNS);			RegCloseKey(hKey);    	}    }    // Try WinNT registry location.    if (strDNS.IsEmpty())    {	RegOpenKey(HKEY_LOCAL_MACHINE, OS_STRING("System\\CurrentControlSet\\Services\\Tcpip\\Parameters"),		&hKey);        	if (hKey != NULL)    	{    	    GetNameServerKey(hKey, "NameServer", strDNS);			if (strDNS.IsEmpty())    			GetNameServerKey(hKey, "DhcpNameServer", strDNS);			RegCloseKey(hKey);    	}    }    // Another  WinNT registry location.    if (strDNS.IsEmpty())    {	RegOpenKey(HKEY_LOCAL_MACHINE, OS_STRING("System\\CurrentControlSet\\Services\\Tcpip"),		&hKey);    	if (hKey != NULL)    	{    	    GetNameServerKey(hKey, "NameServer", strDNS);			if (strDNS.IsEmpty())    			GetNameServerKey(hKey, "DhcpNameServer", strDNS);			RegCloseKey(hKey);    	}    }    // I want to make sure this technique of getting DNS address works. Email bpitzel    // if it fails.    HX_ASSERT( !strDNS.IsEmpty() );#endif}#ifndef _WIN16void CHXNetCheck::GetNameServerKey(HKEY hKey, const char* szKeyName, CHXString& strDNS){    char szDNS[MAX_PATH]; /* Flawfinder: ignore */    DWORD regType = 0 ;    DWORD cbuf;    cbuf = sizeof(szDNS);    if (ERROR_SUCCESS == RegQueryValueEx(hKey, OS_STRING(szKeyName), NULL, &regType, (BYTE *) szDNS, &cbuf))    {	strDNS = szDNS;		// Win95/98 separate multiple DNS addresses with ","	// WinNT separate multiple DNS addresses with ","	// We will grab the first IP address in the list	strDNS = strDNS.SpanExcluding(" ,");	strDNS.TrimLeft();	strDNS.TrimRight();    }}#endif /* _WIN16 */BOOL CHXNetCheck::SmartPing(){    using namespace NetDetectLog;     WRITE_LOG0("SmartPing fc entered ...");    UINT16 nPort = DEF_HTTP_PORT;    // try to get DNS address to ping.    CHXString strPingAddr;    GetDNSAddress(strPingAddr);    nPort = DEF_DNS_PORT;        // No DNS address? Default to a known web server.    // XXXBJP pinging video.real.com, used in Beta 1, should be    // changed for Beta 2!!    if (strPingAddr.IsEmpty())    {	    strPingAddr = "209.66.98.23"; // video.real.com .. UGHHHH!!	    nPort = DEF_HTTP_PORT;    }    return (Ping(strPingAddr, nPort, FALSE));}BOOL CHXNetCheck::FNetCardActive(){#if defined(_WIN16) || defined(WIN32_PLATFORM_PSPC)    return TRUE;#else	char szEnum_Name[ENUM_MAX][20] = {REGSTR_KEY_ROOTENUM, REGSTR_KEY_BIOSENUM, /* Flawfinder: ignore */	REGSTR_KEY_PCIENUM, REGSTR_KEY_ISAENUM, REGSTR_KEY_EISAENUM,	REGSTR_KEY_PCMCIAENUM};    using namespace NetDetectLog;    WRITE_LOG0("FNetCardActive entered ...");    char szClass[64]; /* Flawfinder: ignore */    ULONG ulType;    ULONG32 cbData;    CHXString sCurrentKey;    CHXString sCurrentFiles;    CHXString sDeviceID;    char szCurrentDeviceNode[STRINGSIZE]; /* Flawfinder: ignore */    char szCurrentDevice[STRINGSIZE]; /* Flawfinder: ignore */    char szSoftwareKey[STRINGSIZE]; /* Flawfinder: ignore */    BOOL bFoundKey = FALSE;    int i;    OSVERSIONINFO osv;    memset(&osv, 0, sizeof(osv));    osv.dwOSVersionInfoSize = sizeof(osv);    GetVersionEx(&osv);    if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT)    	return FALSE;    using namespace NetDetectLog;     WRITE_LOG0("Win95/98 : Looking for devices of the Net class...");    // we want to look through the ENUM\BIOS, ENUM\ISAPNP, and ENUM\PCI    // trees for devices of the Net class.  For each display device    // we find we will ask the Device manager if it is active.    for (i = 0; i < ENUM_MAX && !bFoundKey; i++)    {	HKEY hBusKey = 0;	sCurrentKey = (CHXString)REGSTR_KEY_ENUM + BACKSLASH + szEnum_Name[i];	// Start reading the devices	if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, OS_STRING(sCurrentKey), 0, KEY_READ, &hBusKey))	{	    cbData = sizeof(szCurrentDeviceNode);	    ULONG32 dwDevNodeEnumIndex = 0;	    HKEY hDeviceNodeKey;	    // Enumerate all of the devices on the bus	    while (!bFoundKey &&		!RegEnumKeyEx(hBusKey, dwDevNodeEnumIndex, 			      OS_STRING2(szCurrentDeviceNode, cbData), 			      &cbData, NULL, NULL, NULL, NULL))	    {		// get the registry key for the current device node		hDeviceNodeKey = 0;		sCurrentKey = (CHXString)REGSTR_KEY_ENUM + BACKSLASH + szEnum_Name[i] + BACKSLASH + (CHXString)szCurrentDeviceNode;		if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, OS_STRING(sCurrentKey), 0, KEY_READ, &hDeviceNodeKey))		{		    cbData = sizeof(szCurrentDevice);		    ULONG32 dwHWDeviceEnumIndex = 0;		    HKEY hHWDeviceKey;		    // enumerate all of the hardware devices in this Device Node		    while (!bFoundKey &&			!RegEnumKeyEx(hDeviceNodeKey, dwHWDeviceEnumIndex, 				      OS_STRING2(szCurrentDevice, cbData),				      &cbData, NULL, NULL, NULL, NULL))		    {			// get the registry key for the current hardware device			int nBaseKeyLength = sCurrentKey.GetLength();			hHWDeviceKey = 0;			sCurrentKey += BACKSLASH + (CHXString) szCurrentDevice;			if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, OS_STRING(sCurrentKey), 0, KEY_READ, &hHWDeviceKey))			{			    // Ask if this device is a "Net" device by checking it's class			    cbData = sizeof(szClass);			    szClass[0] = 0;			    if (!RegQueryValueEx(hHWDeviceKey, OS_STRING("Class"), 0, &ulType, (LPBYTE) szClass, &cbData)				&& !stricmp(szClass, "Net"))			    {				// if it is a display device then we want to find out if it is				// the active device for this class.				cbData = sizeof(szSoftwareKey);				sDeviceID = (CHXString) szEnum_Name[i] + BACKSLASH + (CHXString)szCurrentDeviceNode				    + BACKSLASH + (CHXString) szCurrentDevice;				// get the registry key name for the software key for the device, if it is not				// null and this is the active device then we are done.				if (!RegQueryValueEx(hHWDeviceKey, OS_STRING("Driver"), 0, &ulType, (LPBYTE) szSoftwareKey, &cbData)				    && szSoftwareKey[0] != '0'				    && DevNodeIsActive((sDeviceID)))	// Call Config Manager in 16-bit code				{				    bFoundKey = TRUE;				    WRITE_LOG1("Found active node %s...", (char const*) sDeviceID);				}			    }			}			// reset the key to the base for the next time through the loop			sCurrentKey = sCurrentKey.Left(nBaseKeyLength);			if (hHWDeviceKey)			{			    RegCloseKey(hHWDeviceKey);			    hHWDeviceKey = 0;			}			// move to next device key			dwHWDeviceEnumIndex++;			// reset size to szCurrentDevice size			cbData = sizeof(szCurrentDevice);		    }		}		if (hDeviceNodeKey)		{		    RegCloseKey(hDeviceNodeKey);		    hDeviceNodeKey = 0;		}		// move to the next device node		dwDevNodeEnumIndex++;		// reset the size to szCurrentDeviceNode size		cbData = sizeof(szCurrentDeviceNode);	    }	}	if (hBusKey)	{	    RegCloseKey(hBusKey);	    hBusKey = 0;	}    }    return bFoundKey;#endif}BOOLCHXNetCheck::DevNodeIsActive(const char *szDeviceID){#ifdef _WIN16    HX_ASSERT (FALSE); // should never get called in win16    return TRUE;#else    HINSTANCE hDevNodeInst;    DWORD dwStatus;    DWORD dwProblemNumber;    DWORD cr;    DWORD (WINAPI * pGetDevNodeStatus32Call) (const char *, LPDWORD, LPDWORD);    // 10 is a magic number for the configuration manager api    // that eventually gets called in the 16 bit dll.    dwStatus = dwProblemNumber = cr = 10;    pGetDevNodeStatus32Call = 0;    hDevNodeInst = LoadLibrary(OS_STRING(_32BIT_DLLNAME));    // add this code if this ever gets into win16; win16 will return nonnull on error from load library  #if _WIN16 if (m_handle < HINSTANCE_ERROR) m_handle = NULL; #endif    if (hDevNodeInst)    {	(FARPROC &) pGetDevNodeStatus32Call = GetProcAddress(hDevNodeInst, OS_STRING("GetDevNodeStatus32Call"));	if (pGetDevNodeStatus32Call)	{	    cr = pGetDevNodeStatus32Call(szDeviceID, &dwStatus, &dwProblemNumber);	}	FreeLibrary(hDevNodeInst);    }    if (cr == 0	&& dwProblemNumber == 0)	return TRUE;    else	return FALSE;#endif}HX_RESULT CHXNetCheck::WinInetGetConnected(BOOL& bConnected){    using namespace NetDetectLog;     WRITE_LOG0("WinInetGetConnected fc entered...");    HINSTANCE hWinInet;    BOOL (WINAPI * pInternetGetConnectedState) (LPDWORD lpdwFlags, DWORD dwReserved);    hWinInet= LoadLibrary(OS_STRING(WININET_DLL));    if (!hWinInet)    {	WRITE_LOG0("WinInet not present ...");    	return HXR_FAIL;    }    (FARPROC &) pInternetGetConnectedState = GetProcAddress(hWinInet, OS_STRING("InternetGetConnectedState"));    if (!pInternetGetConnectedState )    {	WRITE_LOG0("InternetGetConnectedState fc cannot be loaded ...");    		FreeLibrary(hWinInet);    	return HXR_FAIL;    }    DWORD dwFlags;    bConnected = pInternetGetConnectedState(&dwFlags, 0);    FreeLibrary(hWinInet);        WRITE_LOG_WINET(bConnected, dwFlags);#ifdef _INTERNETGETCONNECTEDSTATE_MAY_FAIL_UNEXPECTEDELY_    if (!bConnected) return HXR_FAIL;#else  //_INTERNETGETCONNECTEDSTATE_MAY_FAIL_UNEXPECTEDELY_    return HXR_OK;#endif //_INTERNETGETCONNECTEDSTATE_MAY_FAIL_UNEXPECTEDELY_}

⌨️ 快捷键说明

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