c语言高级代码

来源:互联网 发布:mac微信没声音 编辑:程序博客网 时间:2024/04/29 15:49
#include "windows.h"#include "stdio.h"#include "IPHlpApi.h"#include "Nb30.h"#pragma comment( lib, "iphlpapi.lib" )#pragma comment( lib, "Netapi32.lib")#define BUFSIZE 80#define ALLOCATE_FROM_PROCESS_HEAP( bytes )   HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, bytes )#define DEALLOCATE_FROM_PROCESS_HEAP( ptr )   if( ptr ) HeapFree( GetProcessHeap(), 0, ptr )typedef struct _ASTAT_{ADAPTER_STATUS adapt;NAME_BUFFER    NameBuff[30];} ASTAT, * PASTAT;// 得到操作系统版本void GetOSVersion(){OSVERSIONINFOEX osvi;BOOL bOsVersionInfoEx;char OsVersion[128];// Try calling GetVersionEx using the OSVERSIONINFOEX structure.// If that fails, try using the OSVERSIONINFO structure.ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ){   osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);   if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )    {    printf("GetSystemVersion failed!\n");    return;   }}switch (osvi.dwPlatformId){   // Test for the Windows NT product family.case VER_PLATFORM_WIN32_NT:   // Test for the specific product family.   if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )    strcpy(OsVersion,"Microsoft Windows Server2003 family, ");   if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )    strcpy (OsVersion,"Microsoft Windows XP ");   if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )    strcpy(OsVersion,"Microsoft Windows 2000 ");   if ( osvi.dwMajorVersion <= 4 )    strcpy(OsVersion,"Microsoft Windows NT ");   // Test for specific product on Windows NT 4.0 SP6 and later.   if( bOsVersionInfoEx )   {    // Test for the workstation type.    if ( osvi.wProductType == VER_NT_WORKSTATION )    {     if( osvi.dwMajorVersion == 4 )      strcat(OsVersion, "Workstation 4.0 " );     else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )      strcat( OsVersion,"Home Edition " );     else      strcat( OsVersion,"Professional " );    }    // Test for the server type.    else if ( osvi.wProductType == VER_NT_SERVER )    {     if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )     {      if( osvi.wSuiteMask & VER_SUITE_DATACENTER )       strcat(OsVersion,"Datacenter Edition " );      else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )       strcat(OsVersion,"Enterprise Edition " );      else if( osvi.wSuiteMask == VER_SUITE_BLADE )       strcat(OsVersion,"Web Edition " );      else       strcat(OsVersion,"Standard Edition " );     }     else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )     {      if( osvi.wSuiteMask & VER_SUITE_DATACENTER )       strcat(OsVersion,"Datacenter Server " );      else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )       strcat(OsVersion, "Advanced Server " );      else       strcat(OsVersion,"Server " );     }     else // Windows NT 4.0      {      if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )       strcat(OsVersion,"Server 4.0, Enterprise Edition " );      else       strcat(OsVersion,"Server 4.0 " );     }    }   }   else // Test for specific product on Windows NT 4.0 SP5 and earlier   {    HKEY hKey;    char szProductType[BUFSIZE];    DWORD dwBufLen=BUFSIZE;    LONG lRet;    lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,     "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",     0, KEY_QUERY_VALUE, &hKey );    if( lRet != ERROR_SUCCESS )     return;    lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,     (LPBYTE) szProductType, &dwBufLen);    if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )     return;    RegCloseKey( hKey );    if ( lstrcmpi("WINNT", szProductType) == 0 )     strcat(OsVersion, "Workstation " );    if ( lstrcmpi("LANMANNT", szProductType) == 0 )     strcat(OsVersion,"Server " );    if ( lstrcmpi("SERVERNT", szProductType) == 0 )     strcat(OsVersion,"Advanced Server " );    printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );   }   // Display service pack (if any) and build number.   if( osvi.dwMajorVersion == 4 &&     lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )   {    HKEY hKey;    LONG lRet;    // Test for SP6 versus SP6a.    lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,     "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009",     0, KEY_QUERY_VALUE, &hKey );    if( lRet == ERROR_SUCCESS )     printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF );             else // Windows NT 4.0 prior to SP6a    {     printf( "%s (Build %d)\n",      osvi.szCSDVersion,      osvi.dwBuildNumber & 0xFFFF);    }    RegCloseKey( hKey );   }   else // Windows NT 3.51 and earlier or Windows 2000 and later   {    //    printf( "%s (Build %d)\n",    //      osvi.szCSDVersion,    //      osvi.dwBuildNumber & 0xFFFF);    char temp[10];    strcat(OsVersion," ");    strcat(OsVersion,osvi.szCSDVersion);    _itoa(osvi.dwBuildNumber & 0xFFFF,temp,10);    strcat(OsVersion," (Build");    strcat(OsVersion,temp);    strcat(OsVersion,")\n");   }   break;   // Test for the Windows 95 product family.case VER_PLATFORM_WIN32_WINDOWS:   if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)   {    strcpy(OsVersion,"Microsoft Windows 95 ");    if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )     strcat(OsVersion," OSR2 " );   }   if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)   {    strcpy(OsVersion,"Microsoft Windows 98 ");    if ( osvi.szCSDVersion[1] == 'A' )     strcat(OsVersion," SE " );   }   if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)   {    strcpy(OsVersion,"Microsoft Windows Millennium Edition\n");   }    break;case VER_PLATFORM_WIN32s:   strcpy(OsVersion,"Microsoft Win32s\n");   break;}printf("OS: ");printf(OsVersion);} //得到运行时间void GetRunningTime(){DWORD dwTime;int nDay,nHour,nMinute;dwTime = GetTickCount();nMinute = dwTime / 60000;nHour = nMinute / 60;nMinute = nMinute - nHour * 60;nDay = nHour / 24;printf("Running Time: ");printf("%d day(s),",nDay);printf("%d hour(s),",nHour);printf("%d minute(s)",nMinute);printf("\n");}//得到计算机名void GetMyComputerName(){LPTSTR lpszName;DWORD dwSize = 1024;TCHAR tchBuffer[1024];lpszName = tchBuffer;GetComputerName(lpszName,&dwSize);printf("Computer Name: ");printf("%s",lpszName);printf("\n");}//得到当前用户名void GetCurrentUser(){LPTSTR lpszName;DWORD dwSize = 1024;TCHAR tchBuffer[1024];lpszName = tchBuffer;GetUserName(lpszName,&dwSize);printf("Current User: ");printf("%s",lpszName);printf("\n");}//得到系统目录void GetMySystemDirectory(){LPTSTR lpszName;DWORD dwSize = MAX_PATH + 1;TCHAR tchBuffer[MAX_PATH];lpszName = tchBuffer;GetSystemDirectory(lpszName,dwSize);printf("System Directory: ");printf("%s",lpszName);printf("\n");}//得到CPU信息void GetCPUInfo(){long lResult;HKEY hKey;TCHAR tchData[64];DWORD dwSize;lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\Description\\System\\CentralProcessor\\0",0,KEY_QUERY_VALUE,&hKey);if(lResult == ERROR_SUCCESS){   dwSize = sizeof(tchData);   RegQueryValueEx(hKey,"ProcessorNameString",NULL,NULL,(LPBYTE)tchData,&dwSize);   printf("CPU: ");   printf("%s",tchData);}else{   printf("CPU: ");   printf("Unknown");}RegCloseKey(hKey);printf("\n");}//得到内存信息void GetMemoryInfo(){long lVar;MEMORYSTATUS memoryStatus;memset(&memoryStatus, sizeof (MEMORYSTATUS), 0);memoryStatus.dwLength = sizeof (MEMORYSTATUS);GlobalMemoryStatus (&memoryStatus);lVar = memoryStatus.dwTotalPhys / 1024;printf("Total Memory: ");printf("%ld KB\n",lVar);lVar = memoryStatus.dwAvailPhys / 1024;printf("Available Memory: ");printf("%ld KB\n",lVar);}//得到磁盘信息void GetDiskInfo(){DWORD lInfoSize = GetLogicalDriveStrings(0, NULL);//总磁盘名大小char * chDriver;size_t lDriveSize;chDriver = malloc(lInfoSize + sizeof(""));if(GetLogicalDriveStrings(lInfoSize,chDriver) != lInfoSize - 1){   printf("Cannot get disk information.\n");   return;}printf("Disk Information:\n");lDriveSize = strlen(chDriver);//每个磁盘名大小while( lDriveSize > 0 )//循环来得到所有分区名,如c:\,d:\...{   UINT nType;   ULARGE_INTEGER nTotalBytes, nTotalFreeBytes, nTotalAvailable;   printf("%s ",chDriver);   nType = GetDriveType(chDriver);   switch(nType)   {   case DRIVE_FIXED:    printf("(FIXED) ");    break;   case DRIVE_CDROM:    printf("(CDROM)\n");    break;   case DRIVE_RAMDISK:    printf("(RAMDISK)\n");    break;   case DRIVE_REMOTE:    printf("(REMOTE)\n");    break;   case DRIVE_REMOVABLE:    printf("(REMOVABLE)\n");    break;   case DRIVE_UNKNOWN:    printf("(UNKNOWN)\n");    break;   }   if(nType == DRIVE_FIXED)   {    if(GetDiskFreeSpaceEx(chDriver, &nTotalAvailable, &nTotalBytes, &nTotalFreeBytes))//得到磁盘空间信息    {     printf("Total Size: ");     printf("%ld KB,",nTotalBytes.QuadPart/1024);//总大小     printf("Free Size: ");     printf("%ld KB\n",nTotalFreeBytes.QuadPart/1024);//剩余大小    }   }   chDriver += lDriveSize + 1;   lDriveSize = strlen(chDriver);} }//得到MAC地址void GetMacAddress(DWORD dwIndex){ASTAT Adapter;NCB ncb;UCHAR uRetCode;LANA_ENUM lana_enum;memset(&ncb,0,sizeof(ncb));ncb.ncb_command = NCBENUM;ncb.ncb_buffer = (unsigned char *)&lana_enum;ncb.ncb_length = sizeof(lana_enum);uRetCode = Netbios(&ncb);memset(&ncb, 0, sizeof(ncb));ncb.ncb_command = NCBRESET;ncb.ncb_lana_num = lana_enum.lana[dwIndex];uRetCode = Netbios(&ncb);memset(&ncb, 0, sizeof(ncb));ncb.ncb_command = NCBASTAT;ncb.ncb_lana_num = lana_enum.lana[dwIndex];strcpy((char *)ncb.ncb_callname, "*   ");ncb.ncb_buffer = (unsigned char *) &Adapter;ncb.ncb_length = sizeof(Adapter);uRetCode = Netbios(&ncb);printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n",Adapter.adapt.adapter_address[0],    Adapter.adapt.adapter_address[1],    Adapter.adapt.adapter_address[2],    Adapter.adapt.adapter_address[3],    Adapter.adapt.adapter_address[4],    Adapter.adapt.adapter_address[5]);}//得到网卡信息void GetNetAdapterInfo(){IP_ADAPTER_INFO * pAdptInfo = NULL;IP_ADAPTER_INFO * pNextAd = NULL; ULONG ulLen      = 0;DWORD dwCount               = 0;//网卡个数DWORD dwRet;dwRet = GetAdaptersInfo( pAdptInfo, &ulLen );if( dwRet == ERROR_BUFFER_OVERFLOW ) {   pAdptInfo = ( IP_ADAPTER_INFO* )ALLOCATE_FROM_PROCESS_HEAP( ulLen );   dwRet = GetAdaptersInfo( pAdptInfo, &ulLen );  }pNextAd = pAdptInfo;while( pNextAd ) {   dwCount ++;   pNextAd = pNextAd->Next;}printf("Network Adapter:\n");if( dwRet == ERROR_SUCCESS ) {   pNextAd = pAdptInfo;   while( pNextAd )    {    //网卡描述    IP_ADDR_STRING * pNext = NULL;    printf("Description: %s\n",pNextAd->Description);    //获得MAC地址    GetMacAddress(-- dwCount);    //IP地址和子网掩码    pNext = &( pNextAd->IpAddressList);    printf("IP Address: %s\n",pNext->IpAddress.String);    printf("SubNet Mask: %s\n",pNext->IpMask.String);    //默认网关    pNext = &( pNextAd->GatewayList );    printf("Default Gateway: %s\n",pNext->IpAddress.String);    printf("\n");    pNextAd = pNextAd->Next;   }}DEALLOCATE_FROM_PROCESS_HEAP( pAdptInfo );}main(){printf("\r\n");printf("Detect System Information, by sky-studio");printf("\r\n");printf("Written by sky, hacklaolang@qq.com");printf("\r\n");printf("\r\n");GetOSVersion();//得到操作系统版本GetRunningTime();//得到运行时间GetMyComputerName();//得到计算机名GetCurrentUser();//得到当前用户名GetMySystemDirectory();//得到系统目录GetCPUInfo();//得到CPU信息GetMemoryInfo();//得到内存信息printf("\n");GetDiskInfo();//得到磁盘信息printf("\n");GetNetAdapterInfo();//得到网卡信息} 
这个程序运行不出来结果,#include "Iphlpapi.h"出现错误,
原创粉丝点击