1.
函數原型:
BOOL WINAPI EnumWindows(
_In_ WNDENUMPROC lpEnumFunc,
_In_ LPARAM lParam
);
lpEnumFunc: 應用程序定義的回調函數的指針
lParam: 傳遞給回調函數的應用程序定義的值
MSDN中對EnumWindows的解釋:
Enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.
即:
枚舉屏幕上的所有的頂層窗口,輪流地將這些窗口的句柄傳遞給一個應用程序定義的回調函數。EnumWindows會一直進行下去,直到枚舉完所有的頂層窗口,或者回調函數返回了FALSE.
2.
EnumWindowsProc()函數的定義:
BOOL CALLBACK EnumWindowsProc(
_In_ HWND hwnd,
_In_ LPARAM lParam
);
hwnd: 在枚舉每個頂層窗口而調用該函數的過程中傳遞給該函數的頂層窗口的句柄
lParam: 即EnumWindows()函數的第二個參數。
Return Value:
返回TRUE,則EnumWindows()函數在系統中繼續調用EnumWindowsProc()函數;返回FALSE,則停止枚舉。
MSDN解釋:
An application-defined callback function used with the EnumWindows or EnumDesktopWindows function. It receives top-level window handles. The WNDENUMPROC type defines a pointer to this callback function. EnumWindowsProc is a placeholder for the application-defined function name
即:
應用程序定義的函數,用於EnumWindows()或EnumDesktopWindos()函數。接收頂層窗口句柄。WNDENUMPROC類型定義了指向這種回調函數的指針。EnumWindowsProc是一個應用程序定義的函數名稱的占位符。
應用舉例:
//這段代碼的功能就是枚舉當前所有的頂層窗口句柄,並且指定了一個窗口句柄,如果枚舉到的頂層窗口句柄和傳遞給EnumWindowsProc函數的窗口句柄不同,則使枚舉到的頂層窗口失能
//自定義結構體 typedef struct _DLONG { LONG wParam; LONG lParam; }stLONG; //回調函數的定義 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { stLONG *pDlong = (stLONG*)lParam; BOOL bEnable = (BOOL)pDlong->lParam; if (hwnd != (HWND)pDlong->wParam) EnableWindow(hwnd, bEnable);//如果當前所枚舉到的頂層窗口句柄和主調函數(EnumWindos函數)所傳遞來的額外信息做指定的頂層窗口句柄不同,則進行相關使能或使失能操作
return TRUE; } ...... stLONG dlong; //傳遞給EnumWindowsProc的額外信息
dlong.lParam = (LPARAM)FALSE; dlong.wParam = (WPARAM)hWnd; EnumWindows(EnumWindowsProc, (LONG)&dlong);