首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

常用 Windows API 速查:視窗、裝置、磁碟、環境、事件、網路、效能、程序資訊

     編輯:關於C++

Windows 系統程式設計常需呼叫多樣 API 取得系統資訊。本文彙整 12 大類常用 API 呼叫序列與關鍵參數,供開發者快速查閱與複製參考。

1. 視窗列舉與資訊

HDESK hDesk = OpenDesktop(L"Default", 0, FALSE, DESKTOP_ENUMERATE);
EnumDesktopWindows(hDesk, (WNDENUMPROC)EnumWindowProc, 0);

BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam) {
    TCHAR szTitle[256]; GetWindowText(hWnd, szTitle, 256);
    DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID);
    return TRUE;
}

2. 服務/裝置驅動程式管理

SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
EnumServicesStatus(hSCM, dwType, dwState, lpBuffer, cbBufSize, &pcbBytesNeeded, &lpServicesReturned, &lpResumeHandle);
SC_HANDLE hSvc = OpenService(hSCM, szName, SERVICE_ALL_ACCESS);
QueryServiceConfig(hSvc, lpConfig, cbBufSize, &pcbBytesNeeded);
QueryServiceStatus(hSvc, &ssStatus);
QueryServiceConfig2(hSvc, SERVICE_CONFIG_DESCRIPTION, (LPBYTE)&desc, sizeof(desc), &pcbBytesNeeded);
StartService(hSvc, 0, NULL);
ControlService(hSvc, SERVICE_CONTROL_STOP, &ssStatus);
DeleteService(hSvc);
CloseServiceHandle(hSCM);

3. 磁碟機與磁碟空間

TCHAR szDrives[256]; GetLogicalDriveStrings(256, szDrives);
GetVolumeInformation(szRoot, szVolName, cchVolNameMax, &dwSerial, &dwMaxComp, &dwFlags, szFSName, cchFSNameMax);
GetDiskFreeSpaceEx(szRoot, &ullFreeAvail, &ullTotal, &ullTotalFree);

4. 環境變數(登錄檔與 API 雙軌)

HKEY hKey; RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", 0, KEY_QUERY_VALUE, &hKey);
RegEnumValue(hKey, dwIndex, szName, &cchName, NULL, NULL, NULL, NULL);
GetEnvironmentVariable(szName, szValue, 1024);
RegCloseKey(hKey);

5. 事件記錄讀取

HANDLE hLog = OpenEventLog(NULL, L"System");
DWORD dwOldest; GetOldestEventLogRecord(hLog, &dwOldest);
ReadEventLog(hLog, EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ, 0, pBuffer, 32768, &dwRead, &dwNeeded);
LookupAccountSid(NULL, pSid, szName, &cchName, szDomain, &cchDomain, &snUse);
GetNumberOfEventLogRecords(hLog, &dwTotal);
CloseEventLog(hLog);

6. 網路共用資源列舉

PSHARE_INFO_2 pBuf; DWORD dwEntries, dwTotal, dwResume;
NetShareEnum(NULL, 2, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH, &dwEntries, &dwTotal, &dwResume);
NetApiBufferFree(pBuf);
NetShareDel(NULL, szShareName, 0);

7. 網路介面卡資訊

IP_ADAPTER_INFO ai; ULONG ulSize = sizeof(ai);
GetAdaptersInfo(&ai, &ulSize);

8. 系統效能資訊

PERFORMANCE_INFORMATION pi; pi.cb = sizeof(pi);
GetPerformanceInfo(&pi, sizeof(pi));

9. 程序/執行緒/模組完整枚舉

HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe; pe.dwSize = sizeof(pe);
Process32First(hSnap, &pe);
do {
    HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
    GetProcessTimes(hProc, &ftCreate, &ftExit, &ftKernel, &ftUser);
    GetProcessMemoryInfo(hProc, &pmc, sizeof(pmc));
    GetPriorityClass(hProc);
    GetProcessIoCounters(hProc, &ioc);
    CloseHandle(hProc);
} while (Process32Next(hSnap, &pe));
CloseHandle(hSnap);

模組/執行緒同理使用 TH32CS_SNAPMODULE/TH32CS_SNAPTHREAD 搭配 Module32First/Next、Thread32First/Next。

10. 關機/重啟/休眠/鎖定

AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL); // SE_SHUTDOWN_NAME
ExitWindowsEx(EWX_LOGOFF | EWX_SHUTDOWN | EWX_REBOOT | EWX_POWEROFF, 0);
LockWorkStation();
InitiateSystemShutdown(NULL, L"訊息", 30, FALSE, TRUE);
SetSystemPowerState(TRUE, FALSE); // 休眠/睡眠

11. 使用者帳號列舉

USER_INFO_1* pBuf; DWORD dwEntries, dwTotal, dwResume;
NetUserEnum(NULL, 1, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, MAX_PREFERRED_LENGTH, &dwEntries, &dwTotal, &dwResume);
NetApiBufferFree(pBuf);
NetUserDel(NULL, szUserName);

12. 系統版本與基本資訊

OSVERSIONINFOEX osvi; osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx((OSVERSIONINFO*)&osvi);
GetTickCount(); // 開機時間(ms)
GetComputerName(szBuf, &cchBuf);
GetUserName(szBuf, &cchBuf);
GetWindowsDirectory(szBuf, MAX_PATH);
GetSystemDirectory(szBuf, MAX_PATH);

開發提醒

  • 部分 API 需連結 Advapi32.lib、Netapi32.lib、Psapi.lib、Iphlpapi.lib。
  • 列舉類函數通常需兩次呼叫:第一次取得緩衝區大小,配置記憶體後第二次取得資料。
  • 權限敏感操作(服務控制、關機、程序開啟)需提升 Token 權限(AdjustTokenPrivileges)。
  • Unicode 版本(W 尾碼)為現代開發標準,建議統一使用寬字元 API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved