c++ - 如何用 C++ 显示计算机操作系统?

标签 c++ mfc

我正在制作一个基于 MFC 对话框的应用程序,它的功能是从另一个项目和 PC 读取数据并将这些数据复制到剪贴板。我已经有了从外部项目传输数据所需的代码,但是我对如何获取操作系统数据并将该数据复制到剪贴板有点困惑。

这是我目前的代码。

void CBugsDlg::OnBnClickedBtnCopy()
{
    CVersionTranslatomatic ver(::GetDesktopWindow());

    CString version = ver.GetMajorMinorVersionString() + " " + 
            ver.GetVersionType() + " " + ver.GetBuildNumber() + " " +
            ver.GetServicePack();

    HGLOBAL hglbCopy;

    if( OpenClipboard()){       
        EmptyClipboard();
        wchar_t *wcBuffer = 0;
        hglbCopy = GlobalAlloc(GMEM_MOVEABLE,
                (version.GetLength() + 1)*sizeof(wchar_t)); 
        wcBuffer = (wchar_t*)GlobalLock(hglbCopy);
        lstrcpy(wcBuffer, version);
        GlobalUnlock(hglbCopy);
        SetClipboardData(CF_UNICODETEXT, hglbCopy);
        CloseClipboard();
    }
}

如有任何帮助,我们将不胜感激。

最佳答案

使用 Window API,您可以获取以下操作系统数据-

  1. 操作系统版本 (OSVERSIONINFOEX osvi)
  2. 操作系统系统信息(SYSTEM_INFO si)

我想下面的代码将生成您需要的所有操作系统数据-

// Added the following two function pointers to support the below code
typedef void (WINAPI *PGETSYSTEMINFO)(LPSYSTEM_INFO);
typedef BOOL (WINAPI *PGETPRODUCTINFO)(DWORD, DWORD, DWORD, DWORD, PDWORD);

   OSVERSIONINFOEX osvi;
   SYSTEM_INFO si;
   PGETSYSTEMINFO pGetSystemInfo;
   PGETPRODUCTINFO pGetProductInfo;
   BOOL bOsVersionInfoEx;
   DWORD dwType;

   ZeroMemory(&si, sizeof(SYSTEM_INFO));
   ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
      return 1;

   // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.

   pGetSystemInfo = (PGETSYSTEMINFO ) GetProcAddress(
      GetModuleHandle(TEXT("kernel32.dll")), 
      "GetNativeSystemInfo");
   if(NULL != pGetSystemInfo)
      pGetSystemInfo(&si);
   else GetSystemInfo(&si);

此代码应该很容易与您的 MFC 项目集成。

关于c++ - 如何用 C++ 显示计算机操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565206/

相关文章:

c++ - unordered_map 的拷贝是否具有完全相同的存储桶

visual-c++ - 对话框应用程序和库之间的链接错误

c++ - 如何在 C++ 中获取二维动态字符串数组的维度?

windows - 在 MFC 中注册文件关联在 Windows 7 上不起作用

windows - MFC - 在显示对话框后立即执行代码(相当于 Form.Shown 的 .NET)

c++ - 在同一解决方案中的项目之间传递 CString

c++ - 从 CFileDialog 调用时,IFileOpenDialog 指针为空

c++ - 使用 __declspec(dllexport) 时出错 : Unknown type name '__declspec'

C++链表

c++ - 为什么 range-v3 中不能对范围进行排序?