1.窗口信息
MS為我們提供了打開特定桌面和枚舉桌面窗口的函數。
hDesk = OpenDesktop(lpszDesktop, 0, FALSE, DESKTOP_ENUMERATE);
// 打開我們默認的Default桌面;
EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc, 0);
// 枚舉打開桌面上的所有窗口,由回調函數實現。
BOOL __stdcall EnumWindowProc(HWND, LPARAM);
// 在回調函數中,我們可以獲得窗口的標題和相關進程,線程信息;
GetWindowText(hWnd, szWindowText, dwMaxCount);
GetWindowThreadProcessId(hWnd, &dwPID);
2.設備驅動器信息(服務和設備驅動器差不多,在此不做重復)
設備驅動信息有服務控制管理器(SCM)來管理的,我要打開服務控制管理器,並枚舉所有的設備驅動器。
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
// 以所有權限打開服務控制管理器;
EnumServicesStatus(schManager, dwDeviceType, dwDeviceState,
EnumStatus, dwBufSize, &dwBytesNeeded, &dwDevicesReturned, &dwResumeHandle))
// 枚舉所有設備的當前狀態;
CloseServiceHandle(schManager);
// 記住,在結束訪問後要關閉服務句柄;
OpenService(schManager, szDeviceName, SERVICE_ALL_ACCESS);
// 打開特定的設備驅動器;
QueryServiceConfig(schDevice, lpDeviceConfig, 1024 * 8, &dwBytesNeeded);
// 查詢驅動器的服務配置信息;
QueryServiceStatus(schDevice, &DeviceStatus);
// 查詢設備驅動器的當前狀態;
QueryServiceConfig2(schDevice, SERVICE_CONFIG_DESCRIPTION, (LPBYTE)lpDeviceDescription, 8*1024, &dwBytesNeeded)