在执行`EnumWindows`在Win32 C API中查找窗口时,如何避免使用全局变量?

bod*_*ydo 2 windows winapi global-variables

使用EnumWindows(或FindChildWindows)Win32 API 时如何避免使用全局变量?

我大概有以下代码:

HWND prog_hwnd;

BOOL CALLBACK ProgEnumProc(HWND hwnd, LPARAM lParam) {
    if (...) {
        // found the right hwnd, assign it to prog_hwnd;
        prog_hwnd = hwnd;
        return FALSE;
    }
    return TRUE;
}

void FindProgHwnd()
{
    EnumWindows(ProgEnumProc, 0);
}

int main()
{ 
     FindProgHwnd();
     if (prog_hwnd) {
         // found prog_hwnd, but it's global variable
     }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,为了找到合适的hwnd,我将使用全局变量prog_hwnd.我想避免使用全局变量.有办法吗?

Mik*_*wan 6

将指针传递到变量(LPARAM)prog_hwndlParam.然后,每次调用它时都会将其传递给回调.

在回调中,您可以通过执行分配给传递的变量*(HWND *)lParam = ....

  • @bodacydo这是正确的答案你应该接受它 (2认同)