診斷使用者機器問題時,硬體與 OS 資訊極有幫助。逐一查詢程式碼工作量大,可利用 Windows 內建 dxdiag.exe 產生報告再讀取。
STARTUPINFO si = {sizeof(si), 0};
PROCESS_INFORMATION pi = {0};
TCHAR szCmdLine[MAX_PATH] = _T("dxdiag.exe /whql:off /t dxdiag_output.txt");
if (CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) {
WaitForSingleObject(pi.hProcess, INFINITE); // 等待 dxdiag 執行完成
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
HANDLE hFile = CreateFile(_T("dxdiag_output.txt"), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD dwBytesRead = 0;
char szBuffer[BUFFER_SIZE];
ReadFile(hFile, szBuffer, BUFFER_SIZE-1, &dwBytesRead, NULL);
// 解析 szBuffer 取得硬體/OS 資訊
CloseHandle(hFile);
}
}
參數說明:/whql:off 跳過 WHQL 簽名驗證加快執行,/t 指定輸出文字檔路徑。