我正在制作一个基于 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,您可以获取以下操作系统数据-
- 操作系统版本 (OSVERSIONINFOEX osvi)
- 操作系统系统信息(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/