前段時間因爲項目須要,要求作一個服務器的實時性能監控(CPU、內存、網絡利用率等)和讀取服務器的硬件配置參數的接口供項目組使用,就是一個相似於魯大師之類的東東吧...程序員
固然第一想法確定是利用Windows提供的系統標準API函數來完成所需的功能,固然這也應該是當前最理想最有效率的選擇了。可是若是你對API編程不是很熟練的話...那就至關蛋疼了!你知道用API能夠作到可是不知道用哪一個API,好啊,能夠查MSDN。問題是你連API名字都不知道...固然,若是大家公司容許大家上國內局域網的話那就好辦多了,由於有無數強大的網友會幫你找到答案。使用API編程的另外一個問題是若是你仍舊對API不熟悉的話調用起來至關困難、很不順手。編程
還有一種方案就是--->「強大」的WMI,.net平臺的程序員可能對這個比較熟悉,WMI即windows管理規範。經過它能夠訪問、配置、管理和監視幾乎全部的Windows資源。固然對於程序員而言在WMI體系結構中咱們最須要關心的就是WMI提供的程序和接口。windows
WMI提供程序在WMI和託管資源之間扮演着中間方的角色。提供程序表明使用者應用程序和腳本從WMI託管資源請求信息,併發送指令到WMI託管資源。
下面是咱們利用WMI編程常常要用到的WMI內置提供程序清單,以供編程參考。數組
1.Active Directory提供程序
連接庫文件:dsprov.dll
命名空間:root\directory\ldap
做用:將Active Directory 對象映射到 WMI。 安全
2.事件日誌提供程序
連接庫文件:ntevt.dll
命名空間:root\cimv2
做用:管理 Windows 事件日誌,例如,讀取、備份、清除、複製、刪除、監視、重命名、壓縮、解壓縮和更改事件日誌設置。 服務器
3.註冊表提供程序
連接庫文件:stdprov.dll
命名空間:root\default
做用:讀取、寫入、枚舉、監視、建立、刪除註冊表項和值。 網絡
4.Win32 提供程序
連接庫文件:cimwin32.dll
命名空間:root\cimv2
做用:提供關於計算機、磁盤、外圍設備、文件、文件夾、文件系統、網絡組件、操做系統、打印機、進程、安全性、服務、共享、SAM 用戶及組,以及更多資源的信息。 數據結構
5.Windows 安裝程序提供程序
連接庫文件:msiprov.dll
命名空間:root\cimv2
做用:提供對已安裝軟件信息的訪問。併發
以上能夠看出WMI中的類被分組到不一樣的命名空間中,因此咱們在調用相應的程序庫時要注意引入對應的命名空間~~~咱們今天用到的庫就是cimwin32.dll庫(第4個)。
好,廢話到此爲止,還有不懂的本身下去慢慢研究:如今看代碼...ide
1、基於API方式的實現代碼,簡單的對部分API函數的封裝:
一、GetSysInfo.h文件
- pragma once
-
- #include <afxtempl.h>
-
- class GetSysInfo
- {
- public:
- GetSysInfo(void);
- ~GetSysInfo(void);
-
- public:
-
- void GetOSVersion(CString &strOSVersion,CString &strServiceVersion);
- BOOL IsWow64();
-
-
- int GetInterFaceCount();
- void GetInterFaceName(CString &InterfaceName,int pNum);
-
-
- void GetMemoryInfo(CString &dwTotalPhys,CString &dwTotalVirtual);
-
-
- void GetCpuInfo(CString &chProcessorName,CString &chProcessorType,DWORD &dwNum,DWORD &dwMaxClockSpeed);
-
-
- void GetDiskInfo(DWORD &dwNum,CString chDriveInfo[]);
-
-
- void GetDisplayCardInfo(DWORD &dwNum,CString chCardName[]);
- private:
- CStringList Interfaces;
- CList < DWORD, DWORD &> Bandwidths;
- CList < DWORD, DWORD &> TotalTraffics;
- };
2.GetSysInfo.cpp文件
- #include "StdAfx.h"
- #include "GetSysInfo.h"
- #include "float.h"
- #include "winperf.h"
-
- GetSysInfo::GetSysInfo(void)
- {
- }
-
- GetSysInfo::~GetSysInfo(void)
- {
- }
-
- void GetSysInfo::GetOSVersion(CString &strOSVersion,CString &strServiceVersion)
- {
- CString str;
- OSVERSIONINFOEX osvi;
- SYSTEM_INFO si;
- BOOL bOsVersionInfoEx;
-
- ZeroMemory(&si, sizeof(SYSTEM_INFO));
- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
-
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
- {
- osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- GetVersionEx ( (OSVERSIONINFO *) &osvi);
- }
-
-
- GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
- "GetNativeSystemInfo");
-
- GetSystemInfo(&si);
- switch (osvi.dwPlatformId)
- {
- case VER_PLATFORM_WIN32_NT:
- if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
- {
- if( osvi.wProductType == VER_NT_WORKSTATION )
- {
- str.Format(_T("Windows Vista "));
- }
- else
- {
- str.Format(_T("Windows Server \"Longhorn\" "));
- }
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
- {
- if( GetSystemMetrics(SM_SERVERR2) )
- {
- str.Format(_T("Microsoft Windows Server 2003 \"R2\" "));
- }
- else if( osvi.wProductType == VER_NT_WORKSTATION &&
- si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
- {
- str.Format(_T("Microsoft Windows XP Professional x64 Edition "));
- }
- else
- {
- str.Format(_T("Microsoft Windows Server 2003, "));
- }
- }
-
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
- {
- str.Format(_T("Microsoft Windows XP "));
- }
-
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
- str.Format(_T("Microsoft Windows 2000 "));
-
- if ( osvi.dwMajorVersion <= 4 )
- {
- str.Format(_T("Microsoft Windows NT "));
- }
-
-
- if( bOsVersionInfoEx )
- {
-
-
- strServiceVersion.Format(_T("Service Pack %d"),osvi.wServicePackMajor);
-
-
- if ( osvi.wProductType == VER_NT_WORKSTATION &&
- si.wProcessorArchitecture!=PROCESSOR_ARCHITECTURE_AMD64)
- {
- if( osvi.dwMajorVersion == 4 )
- str = str + _T("Workstation 4.0");
- else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
- str = str + _T("Home Edition");
- else str = str + _T( "Professional");
- }
-
-
- else if ( osvi.wProductType == VER_NT_SERVER ||
- osvi.wProductType == VER_NT_DOMAIN_CONTROLLER )
- {
- if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
- {
- if ( si.wProcessorArchitecture ==
- PROCESSOR_ARCHITECTURE_IA64 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- str = str + _T("Datacenter Edition for Itanium-based Systems");
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- str = str + _T("Enterprise Edition for Itanium-based Systems");
- }
-
- else if ( si.wProcessorArchitecture ==
- PROCESSOR_ARCHITECTURE_AMD64 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- str = str + _T( "Datacenter x64 Edition ");
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- str = str + _T( "Enterprise x64 Edition ");
- else str = str + _T( "Standard x64 Edition ");
- }
-
- else
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- str = str + _T( "Datacenter Edition ");
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- str = str + _T( "Enterprise Edition ");
- else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
- str = str + _T( "Web Edition ");
- else str = str + _T( "Standard Edition ");
- }
- }
- else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- str = str + _T("Datacenter Server ");
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- str = str + _T( "Advanced Server ");
- else str = str + _T( "Server ");
- }
- else
- {
- if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- str = str + _T ("Server 4.0, Enterprise Edition ");
- else str = str + _T ( "Server 4.0 " );
- }
- }
- }
-
- else
- {
- HKEY hKey;
- TCHAR szProductType[256];
- DWORD dwBufLen=256*sizeof(TCHAR);
- LONG lRet;
-
- lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
- _T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hKey );
- if( lRet != ERROR_SUCCESS )
- strOSVersion = str;
- return;
-
- lRet = RegQueryValueEx( hKey, TEXT("ProductType"),
- NULL, NULL, (LPBYTE) szProductType, &dwBufLen);
- RegCloseKey( hKey );
-
- if( (lRet != ERROR_SUCCESS) ||
- (dwBufLen > 256*sizeof(TCHAR)) )
- strOSVersion = str;
- return;
-
- if ( lstrcmpi( TEXT("WINNT"), szProductType) == 0 )
- str = str + _T( "Workstation ");
- if ( lstrcmpi( TEXT("LANMANNT"), szProductType) == 0 )
- str = str + _T( "Server " );
- if ( lstrcmpi( TEXT("SERVERNT"), szProductType) == 0 )
- str = str + _T( "Advanced Server ");
- str.Format(_T( "%d.%d "), osvi.dwMajorVersion, osvi.dwMinorVersion );
- }
-
-
-
- if( osvi.dwMajorVersion == 4 &&
- lstrcmpi( osvi.szCSDVersion, TEXT("Service Pack 6") ) == 0 )
- {
- HKEY hKey;
- LONG lRet;
-
-
- lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
- _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009"), 0, KEY_QUERY_VALUE, &hKey );
- if( lRet == ERROR_SUCCESS )
- str.Format(_T( "Service Pack 6a (Build %d)\n"),
- osvi.dwBuildNumber & 0xFFFF );
- else
- {
- _tprintf( TEXT("%s (Build %d)\n"),
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- }
-
- RegCloseKey( hKey );
- }
- else
- {
- _tprintf( TEXT("%s (Build %d)\n"),
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- }
-
- break;
-
-
- case VER_PLATFORM_WIN32_WINDOWS:
-
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
- {
- str.Format(_T("Microsoft Windows 95 "));
- if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')
- str = str + _T("OSR2 ");
- }
-
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
- {
- str.Format(_T("Microsoft Windows 98 "));
- if ( osvi.szCSDVersion[1]=='A' || osvi.szCSDVersion[1]=='B')
- str = str + _T("SE ");
- }
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
- {
- str.Format(_T("Microsoft Windows Millennium Edition\n"));
- }
- break;
-
- case VER_PLATFORM_WIN32s:
- str.Format(_T("Microsoft Win32s\n"));
- break;
- default:
- break;
- }
-
- strOSVersion = str;
- }
-
- BOOL GetSysInfo::IsWow64()
- {
- typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
- LPFN_ISWOW64PROCESS fnIsWow64Process;
- BOOL bIsWow64 = FALSE;
- fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(_T("kernel32")),"IsWow64Process");
- if (NULL != fnIsWow64Process)
- {
- fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
- }
- return bIsWow64;
- }
-
- void GetSysInfo::GetCpuInfo(CString &chProcessorName,CString &chProcessorType,DWORD &dwNum,DWORD &dwMaxClockSpeed)
- {
-
- CString strPath=_T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
- CRegKey regkey;
- LONG lResult;
- lResult=regkey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
- if (lResult!=ERROR_SUCCESS)
- {
- return;
- }
- WCHAR chCPUName[50] = {0};
- DWORD dwSize=50;
-
-
- if (ERROR_SUCCESS == regkey.QueryStringValue(_T("ProcessorNameString"),chCPUName,&dwSize))
- {
- chProcessorName = chCPUName;
- }
-
-
- DWORD dwValue;
- if (ERROR_SUCCESS == regkey.QueryDWORDValue(_T("~MHz"),dwValue))
- {
- dwMaxClockSpeed = dwValue;
- }
- regkey.Close();
-
-
-
- SYSTEM_INFO si;
- memset(&si,0,sizeof(SYSTEM_INFO));
- GetSystemInfo(&si);
- dwNum = si.dwNumberOfProcessors;
-
- switch (si.dwProcessorType)
- {
- case PROCESSOR_INTEL_386:
- {
- chProcessorType.Format(_T("Intel 386 processor"));
- }
- break;
- case PROCESSOR_INTEL_486:
- {
- chProcessorType.Format(_T("Intel 486 Processor"));
- }
- break;
- case PROCESSOR_INTEL_PENTIUM:
- {
- chProcessorType.Format(_T("Intel Pentium Processor"));
- }
- break;
- case PROCESSOR_INTEL_IA64:
- {
- chProcessorType.Format(_T("Intel IA64 Processor"));
- }
- break;
- case PROCESSOR_AMD_X8664:
- {
- chProcessorType.Format(_T("AMD X8664 Processor"));
- }
- break;
- default:
- chProcessorType.Format(_T("未知"));
- break;
- }
-
-
- }
-
- void GetSysInfo::GetMemoryInfo(CString &dwTotalPhys,CString &dwTotalVirtual)
- {
-
- MEMORYSTATUS Mem;
-
- GlobalMemoryStatus(&Mem);
-
- DWORD dwSize = (DWORD)Mem.dwTotalPhys/(1024*1024);
- DWORD dwVirtSize = (DWORD)Mem.dwTotalVirtual/(1024*1024);
-
- dwTotalPhys.Format(_T("物理內存:%ld MB"),dwSize);
- dwTotalVirtual.Format(_T("虛擬內存:%ld MB"),dwVirtSize);
- }
-
- int GetSysInfo::GetInterFaceCount()
- {
-
-
-
-
-
- try
- {
- #define DEFAULT_BUFFER_SIZE 40960L
-
- unsigned char *data = (unsigned char*)malloc(DEFAULT_BUFFER_SIZE);
- DWORD type;
- DWORD size = DEFAULT_BUFFER_SIZE;
- DWORD ret;
-
- char s_key[4096];
- sprintf_s(s_key , 4096 , "510");
-
- CString str(s_key);
-
-
- while((ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, str, 0, &type, data, &size)) != ERROR_SUCCESS)
- {
- Sleep(10);
-
- if(ret == ERROR_MORE_DATA)
- {
- Sleep(10);
- size += DEFAULT_BUFFER_SIZE;
- data = (unsigned char*) realloc(data, size);
-
- ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, str, 0, &type, data, &size);
- }
-
-
- if(ret != ERROR_SUCCESS)
- {
- if (NULL != data)
- {
- free(data);
- data = NULL;
- }
- return 0;
- }
- }
-
-
-
- PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;
-
- PERF_OBJECT_TYPE *objectPtr = (PERF_OBJECT_TYPE *) ((BYTE *)dataBlockPtr + dataBlockPtr->HeaderLength);
-
- for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++)
- {
- char nameBuffer[255] = {0};
- if(objectPtr->ObjectNameTitleIndex == 510)
- {
- DWORD processIdOffset = ULONG_MAX;
- PERF_COUNTER_DEFINITION *counterPtr =(PERF_COUNTER_DEFINITION *) ((BYTE *)objectPtr + objectPtr->HeaderLength);
-
- for(int b=0 ; b<(int)objectPtr->NumCounters ; b++)
- {
- if(counterPtr->CounterNameTitleIndex == 520)
- processIdOffset = counterPtr->CounterOffset;
-
- counterPtr =(PERF_COUNTER_DEFINITION *) ((BYTE *) counterPtr + counterPtr->ByteLength);
- }
-
- if(processIdOffset == ULONG_MAX) {
- if(data != NULL)
- {
- free(data);
- data = NULL;
- }
- return 0;
- }
-
- PERF_INSTANCE_DEFINITION *instancePtr =(PERF_INSTANCE_DEFINITION *) ((BYTE *) objectPtr + objectPtr->DefinitionLength);
-
- for(int b=0 ; b<objectPtr->NumInstances ; b++)
- {
- wchar_t *namePtr = (wchar_t *) ((BYTE *)instancePtr + instancePtr->NameOffset);
- PERF_COUNTER_BLOCK *counterBlockPtr = (PERF_COUNTER_BLOCK *) ((BYTE *)instancePtr + instancePtr->ByteLength);
-
- char pName[256] = {0};
- WideCharToMultiByte(CP_ACP, 0, namePtr, -1, pName, sizeof(nameBuffer), 0, 0);
-
- DWORD bandwith = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));
- DWORD tottraff = 0;
-
- Interfaces.AddTail(CString(pName));
- Bandwidths.AddTail(bandwith);
- TotalTraffics.AddTail(tottraff);
-
- PERF_COUNTER_BLOCK *pCtrBlk = (PERF_COUNTER_BLOCK *) ((BYTE *)instancePtr + instancePtr->ByteLength);
-
-
- instancePtr = (PERF_INSTANCE_DEFINITION *) ((BYTE *)instancePtr + instancePtr->ByteLength + pCtrBlk->ByteLength);
- }
- }
- objectPtr = (PERF_OBJECT_TYPE *) ((BYTE *)objectPtr + objectPtr->TotalByteLength);
- }
- if(data != NULL)
- {
- free(data);
- data = NULL;
- }
- }
- catch(...)
- {
- return 0;
- }
- return Interfaces.GetCount();
- }
-
- void GetSysInfo::GetInterFaceName(CString &InterfaceName,int pNum)
- {
-
-
-
- POSITION pos = Interfaces.FindIndex(pNum);
- if(pos==NULL)
- return ;
-
- InterfaceName = Interfaces.GetAt(pos);
- pos = Bandwidths.FindIndex(pNum);
- if (pos == NULL)
- return;
- DWORD dwBandwidth = Bandwidths.GetAt(pos);
-
- CString str;
- str.Format(_T("%d"),dwBandwidth);
-
- InterfaceName = InterfaceName + str;
- }
-
- void GetSysInfo::GetDiskInfo(DWORD &dwNum,CString chDriveInfo[])
- {
- DWORD DiskCount = 0;
-
-
- DWORD DiskInfo = GetLogicalDrives();
-
-
- while(DiskInfo)
- {
-
- Sleep(10);
- if(DiskInfo&1)
- {
- DiskCount++;
- }
- DiskInfo = DiskInfo >> 1;
- }
-
- if (dwNum < DiskCount)
- {
- return;
- }
- dwNum = DiskCount;
-
-
-
-
- int DSLength = GetLogicalDriveStrings(0,NULL);
-
- WCHAR* DStr = new WCHAR[DSLength];
- memset(DStr,0,DSLength);
-
-
- GetLogicalDriveStrings(DSLength,DStr);
-
- int DType;
- int si=0;
- BOOL fResult;
- unsigned _int64 i64FreeBytesToCaller;
- unsigned _int64 i64TotalBytes;
- unsigned _int64 i64FreeBytes;
-
-
- for(int i=0;i<DSLength/4;++i)
- {
- Sleep(10);
- CString strdriver = DStr+i*4;
- CString strTmp,strTotalBytes,strFreeBytes;
- DType = GetDriveType(strdriver);
- switch (DType)
- {
- case DRIVE_FIXED:
- {
- strTmp.Format(_T("本地磁盤"));
- }
- break;
- case DRIVE_CDROM:
- {
- strTmp.Format(_T("DVD驅動器"));
- }
- break;
- case DRIVE_REMOVABLE:
- {
- strTmp.Format(_T("可移動磁盤"));
- }
- break;
- case DRIVE_REMOTE:
- {
- strTmp.Format(_T("網絡磁盤"));
- }
- break;
- case DRIVE_RAMDISK:
- {
- strTmp.Format(_T("虛擬RAM磁盤"));
- }
- break;
- case DRIVE_UNKNOWN:
- {
- strTmp.Format(_T("虛擬RAM未知設備"));
- }
- break;
- default:
- strTmp.Format(_T("未知設備"));
- break;
- }
-
-
- fResult = GetDiskFreeSpaceEx (strdriver,
- (PULARGE_INTEGER)&i64FreeBytesToCaller,
- (PULARGE_INTEGER)&i64TotalBytes,
- (PULARGE_INTEGER)&i64FreeBytes);
-
- if(fResult)
- {
- strTotalBytes.Format(_T("磁盤總容量%fMB"),(float)i64TotalBytes/1024/1024);
- strFreeBytes.Format(_T("磁盤剩餘空間%fMB"),(float)i64FreeBytesToCaller/1024/1024);
- }
- else
- {
- strTotalBytes.Format(_T(""));
- strFreeBytes.Format(_T(""));
- }
- chDriveInfo[i] = strTmp + _T("(") + strdriver + _T("):") + strTotalBytes + strFreeBytes;
- si+=4;
- }
- }
-
- void GetSysInfo::GetDisplayCardInfo(DWORD &dwNum,CString chCardName[])
- {
- HKEY keyServ;
- HKEY keyEnum;
- HKEY key;
- HKEY key2;
- LONG lResult;
-
-
- lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\CurrentControlSet\\Services"),0,KEY_READ,&keyServ);
- if (ERROR_SUCCESS != lResult)
- return;
-
-
-
- lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\CurrentControlSet\\Enum"),0,KEY_READ,&keyEnum);
- if (ERROR_SUCCESS != lResult)
- return;
-
- int i = 0,count = 0;
- DWORD size = 0,type = 0;
- for (;;++i)
- {
- Sleep(5);
- size = 512;
- TCHAR name[512] = {0};
-
-
- lResult = RegEnumKeyEx(keyServ,i,name,&size,NULL,NULL,NULL,NULL);
-
-
- if(lResult == ERROR_NO_MORE_ITEMS)
- break;
-
-
- lResult = RegOpenKeyEx(keyServ,name,0,KEY_READ,&key);
- if (lResult != ERROR_SUCCESS)
- {
- RegCloseKey(keyServ);
- return;
- }
-
-
- size = 512;
-
- lResult = RegQueryValueEx(key,TEXT("Group"),0,&type,(LPBYTE)name,&size);
- if(lResult == ERROR_FILE_NOT_FOUND)
- {
-
- RegCloseKey(key);
- continue;
- };
-
-
-
-
- if(_tcscmp(TEXT("Video"),name)!=0)
- {
- RegCloseKey(key);
- continue;
- };
-
-